Swift - 使用NumberFormatter進(jìn)行數(shù)字格式化顯示(附樣例)

1止喷,將數(shù)字轉(zhuǎn)成字符串

(1)最簡(jiǎn)單的便是使用 NumberFormatter 的 localizedString 方法進(jìn)行數(shù)字格式化:

  • from 屬性為需要格式化的數(shù)字(必須為 NSNumber 類(lèi)型)
  • number 屬性可以設(shè)置相應(yīng)的顯示樣式辙售。
import UIKit
 
class ViewController: UIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //原始數(shù)字(需要先轉(zhuǎn)成NSNumber類(lèi)型)
        let number = NSNumber(value: 1234.5678)
         
        //四舍五入的整數(shù)
        let none = NumberFormatter.localizedString(from: number, number: .none)
        //小數(shù)形式(以國(guó)際化格式輸出 保留三位小數(shù),第四位小數(shù)四舍五入)
        let decimal = NumberFormatter.localizedString(from: number, number: .decimal)
        //百分?jǐn)?shù)形式
        let percent = NumberFormatter.localizedString(from: number, number: .percent)
        //科學(xué)計(jì)數(shù)
        let scientific = NumberFormatter.localizedString(from: number, number: .scientific)
        //朗讀形式(英文表示)
        let spellOut = NumberFormatter.localizedString(from: number, number: .spellOut)
        //序數(shù)形式
        let ordinal = NumberFormatter.localizedString(from: number, number: .ordinal)
        //貨幣形式(以貨幣通用格式輸出 保留2位小數(shù),第三位小數(shù)四舍五入,在前面添加貨幣符號(hào))
        let currency = NumberFormatter.localizedString(from: number, number: .currency)
        //貨幣形式
        let currencyISOCode = NumberFormatter.localizedString(from: number,
                                                              number: .currencyISOCode)
        //貨幣形式
        let currencyPlural = NumberFormatter.localizedString(from: number,
                                                             number: .currencyPlural)
        //會(huì)計(jì)計(jì)數(shù)
        let currencyAccounting = NumberFormatter.localizedString(from: number,
                                                            number: .currencyAccounting)
         
        //打印結(jié)果
        print("原始值 = \(number)")
        print("none = \(none)")
        print("decimal = \(decimal)")
        print("percent = \(percent)")
        print("scientific = \(scientific)")
        print("spellOut = \(spellOut)")
        print("ordinal = \(ordinal)")
        print("currency = \(currency)")
        print("currencyISOCode = \(currencyISOCode)")
        print("currencyPlural = \(currencyPlural)")
        print("currencyAccounting = \(currencyAccounting)")
    }
}
image.png

2,將字符串轉(zhuǎn)為數(shù)字

(1)NumberFormatter 除了可以將數(shù)字轉(zhuǎn)成字符串芯勘,還可以將字符串轉(zhuǎn)為數(shù)字。

//從字符串裝成數(shù)字
let number = NumberFormatter().number(from: "1234.5678")!
 
//四舍五入的整數(shù)
let none = NumberFormatter.localizedString(from: number, number: .none)
//小數(shù)形式(以國(guó)際化格式輸出 保留三位小數(shù),第四位小數(shù)四舍五入)
let decimal = NumberFormatter.localizedString(from: number, number: .decimal)
 
//打印結(jié)果
print("原始值 = \(number)")
print("none = \(none)")
print("decimal = \(decimal)")
image.png

二绢慢、進(jìn)階用法

除了使用 NumberFormatter 的 localizedString 方法提供的幾種格式化方式外腻贰。我們也可以設(shè)置 NumberFormatter 對(duì)象的相應(yīng)屬性,來(lái)實(shí)現(xiàn)定制巩搏。

1吞歼,修改分割符、分割位數(shù)

image.png
//原始值
let number = NSNumber(value: 12345.6789)
 
//創(chuàng)建一個(gè)NumberFormatter對(duì)象
let numberFormatter = NumberFormatter()
//設(shè)置number顯示樣式
numberFormatter.numberStyle = .decimal  // 小數(shù)形式
numberFormatter.usesGroupingSeparator = true //設(shè)置用組分隔
numberFormatter.groupingSeparator = "," //分隔符號(hào)
numberFormatter.groupingSize = 4  //分隔位數(shù)
//格式化
let format = numberFormatter.string(from: number)!
 
//打印結(jié)果
print("原始值 = \(number)")
print("格式化結(jié)果 = \(format)")

2塔猾,設(shè)置格式寬度、填充符稽坤、填充位置

image.png
//原始值
let number = NSNumber(value: 12345.6789)
 
//創(chuàng)建一個(gè)NumberFormatter對(duì)象
let numberFormatter = NumberFormatter()
//設(shè)置number顯示樣式
numberFormatter.numberStyle = .none //四舍五入的整數(shù)
numberFormatter.formatWidth = 10 //補(bǔ)齊10位
numberFormatter.paddingCharacter = "0" //不足位數(shù)用0補(bǔ)
numberFormatter.paddingPosition = .beforePrefix  //補(bǔ)在前面
//格式化
let format = numberFormatter.string(from: number)!
 
//打印結(jié)果
print("原始值 = \(number)")
print("格式化結(jié)果 = \(format)")

3丈甸,設(shè)置最大整數(shù)位數(shù)、最小整數(shù)位數(shù)

image.png
//原始值
let number = NSNumber(value: 5.6789)
 
//創(chuàng)建一個(gè)NumberFormatter對(duì)象
let numberFormatter = NumberFormatter()
//設(shè)置number顯示樣式
numberFormatter.numberStyle = .none //四舍五入的整數(shù)
numberFormatter.maximumIntegerDigits = 4 //設(shè)置最大整數(shù)位數(shù)(超過(guò)的直接截?cái)啵?numberFormatter.minimumIntegerDigits = 3 //設(shè)置最小整數(shù)位數(shù)(不足的前面補(bǔ)0)
//格式化
let format = numberFormatter.string(from: number)!
 
//打印結(jié)果
print("原始值 = \(number)")
print("格式化結(jié)果 = \(format)")

4尿褪,設(shè)置最大小數(shù)位數(shù)睦擂、最小小數(shù)位數(shù)

image.png
//原始值
let number = NSNumber(value: 12345.6)
 
//創(chuàng)建一個(gè)NumberFormatter對(duì)象
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 3 //設(shè)置小數(shù)點(diǎn)后最多3位
numberFormatter.minimumFractionDigits = 2 //設(shè)置小數(shù)點(diǎn)后最少2位(不足補(bǔ)0)
//格式化
let format = numberFormatter.string(from: number)!
 
//打印結(jié)果
print("原始值 = \(number)")
print("格式化結(jié)果 = \(format)")

5,設(shè)置前綴杖玲、后綴

image.png
//原始值
let number = NSNumber(value: 12345.6789)
 
//創(chuàng)建一個(gè)NumberFormatter對(duì)象
let numberFormatter = NumberFormatter()
//設(shè)置number顯示樣式
numberFormatter.numberStyle = .none //四舍五入的整數(shù)
numberFormatter.positivePrefix = "$" //自定義前綴
numberFormatter.positiveSuffix = "元" //自定義后綴
//格式化
let format = numberFormatter.string(from: number)!
 
//打印結(jié)果
print("原始值 = \(number)")
print("格式化結(jié)果 = \(format)")

6顿仇,設(shè)置格式化字符串

image.png
//原始值
let number = NSNumber(value: -12345.6789)
 
//創(chuàng)建一個(gè)NumberFormatter對(duì)象
let numberFormatter = NumberFormatter()
numberFormatter.positiveFormat = "###,###.##" //設(shè)置格式
//格式化
let format = numberFormatter.string(from: number)!
 
//打印結(jié)果
print("原始值 = \(number)")
print("格式化結(jié)果 = \(format)")

https://www.hangge.com/blog/cache/detail_2086.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摆马,隨后出現(xiàn)的幾起案子臼闻,更是在濱河造成了極大的恐慌,老刑警劉巖囤采,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件述呐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蕉毯,警方通過(guò)查閱死者的電腦和手機(jī)乓搬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)思犁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人进肯,你說(shuō)我怎么就攤上這事激蹲。” “怎么了江掩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵学辱,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我频敛,道長(zhǎng)项郊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任斟赚,我火速辦了婚禮着降,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拗军。我一直安慰自己任洞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布发侵。 她就那樣靜靜地躺著交掏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刃鳄。 梳的紋絲不亂的頭發(fā)上盅弛,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音叔锐,去河邊找鬼挪鹏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愉烙,可吹牛的內(nèi)容都是我干的讨盒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼步责,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼返顺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蔓肯,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤遂鹊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蔗包,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體稿辙,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年气忠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邻储。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赋咽。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吨娜,靈堂內(nèi)的尸體忽然破棺而出脓匿,到底是詐尸還是另有隱情,我是刑警寧澤宦赠,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布陪毡,位于F島的核電站,受9級(jí)特大地震影響勾扭,放射性物質(zhì)發(fā)生泄漏毡琉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一妙色、第九天 我趴在偏房一處隱蔽的房頂上張望桅滋。 院中可真熱鬧,春花似錦身辨、人聲如沸丐谋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)号俐。三九已至,卻和暖如春定庵,著一層夾襖步出監(jiān)牢的瞬間吏饿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蔬浙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猪落,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓敛滋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親兴革。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绎晃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355