iOS中的数字格式化处理,系统有一个非常好用的类NSNumberFormatter,但是在swift去掉了NS前缀NumberFormatter,用法是一样的,今天我们就来讲一下这个的用法。
-
NumberFormatter.style数字格式
-
none四舍五入 举个栗子:
let number = 123.456;
let numberstring = NumberFormatter.localizedString(from: NSNumber.init(value: number), number: .none);
print("输出:\(numberstring)"); // 输出 123
-
decimal保留小数点后3位数字,并四舍五入。举?:
let number = 123.456789;
let numberstring = NumberFormatter.localizedString(from: NSNumber.init(value: number), number: .decimal);
print("输出:\(numberstring)"); // 输出 123.457
-
currency 货币格式。保留2位小数,并四舍五入。
let number = 123.456789;
let numberstring = NumberFormatter.localizedString(from: NSNumber.init(value: number), number: .currency);
print("输出:\(numberstring)"); //地区 美国 输出 $123.46 中国 输出:¥123.30
-
percent 百分数格式,不保留小数。
let number = 0.456789;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .percent);
print("输出:\(numberstring)"); // 输出 46%
- scientific 科学计数格式。
let number = 123.456789;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .scientific);
print("输出:\(numberstring)"); // 输出: 1.23456789E2
- spellOut 朗读格式
let number = 123.456789;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .spellOut);
print("输出:\(numberstring)"); // 地区为美国输出:one hundred twenty-three point four five six seven eight nine 地区为中国输出: 一百二十三点四五六七八九
- ordinal 序数格式
let number = 123;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .ordinal);
print("输出:\(numberstring)"); // 输出:123rd
- currencyISOCode 国际标准组织通用货币代号
let number = 123;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .currencyISOCode);
print("输出:\(numberstring)"); // 地区: 美国 输出:USD123.00 中国 输出: CNY123.30
- currencyPlural 货币的后缀
let number = 123;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .currencyPlural);
print("输出:\(numberstring)"); // 如果地区为美国: 输出: 123.00 US dollars 如果地区为中国: 输出: 123.00人民币
- currencyAccounting
let number = 123.3;
let numberstring = NumberFormatter.localizedString(from:
NSNumber.init(value: number), number: .currencyAccounting);
print("输出:\(numberstring)"); // 地区 美国 输出:$123.00 中国 输出:¥123.30
很显然上述方式已经基本上能满足我们的需求了,但是它的强大之处不仅在于这么一点点,我们还可以自定义数字格式,我们来看自定义的格式。
我们来看它的属性:
- generatesDecimalNumbers 默认为false ,输出是否是一个NSDecimalNumber 的类。
let numberFormater = NumberFormatter();
numberFormater.generatesDecimalNumbers = true;
let value = numberFormater.number(from: "123.456");
if let decimal = value as? NSDecimalNumber {
print("输出:\(decimal)");
}
// 输出:123.456
- positiveFormat negativeFormat 正、负数格式 默认为:#
let numberFormater = NumberFormatter();
print("negativeFormat \(numberFormater.negativeFormat)") // #
numberFormater.negativeFormat = "-#负数";
let value = numberFormater.string(from: -123123.4567);
print("输出:\(value)"); // 输出 输出:-123123负数
-
textAttributesForPositiveValues textAttributesForNegativeValues 用于显示正、负数的富文本 暂时不是很明确用法
-
allowsFloats 是否允许有浮点 默认为 true
let numberFormater = NumberFormatter();
print("numberFormater.allowsFloats
(numberFormater.allowsFloats)");
numberFormater.allowsFloats = false;
let value = numberFormater.number(from: "123.45")
print("输出:\(value)"); // 输出: nil 若果为 true 则输出:123.45
- decimalSeparator 小数分割符号 默认为 . 这个一般不需要修改。
-
alwaysShowsDecimalSeparator 是否总是显示小数分隔符 默认为 false
let numberFormater = NumberFormatter();
print("\(numberFormater.alwaysShowsDecimalSeparator)"); // flase
numberFormater.alwaysShowsDecimalSeparator = true;
let value = numberFormater.string(from: 1234.567);
print("输出:\(value)"); // 输出 1235.
- currencyDecimalSeparator 货币分割符号: 默认为 .
let numberFormater = NumberFormatter();
numberFormater.numberStyle = .currencyAccounting;
print("\(numberFormater.currencyDecimalSeparator)");
numberFormater.currencyDecimalSeparator = "-";
let value = numberFormater.string(from: 1234.567);
print("输出:\(value)"); // 输出:$1,234-57
- usesGroupingSeparator、groupingSeparator、groupingSize、secondaryGroupingSize。 是否使用组的行是分割,默认为true。 组的分割方式 默认为 ,。组的大小默认为3。其他的分组大小,默认为0。
let numberFormater = NumberFormatter();
numberFormater.numberStyle = .decimal;
numberFormater.groupingSize = 4;
numberFormater.groupingSeparator = "-"
numberFormater.secondaryGroupingSize = 3;
numberFormater.usesGroupingSeparator = true;
let value = numberFormater.string(from: 123456789);
print("输出:\(value)"); // 输出 12-345-6789
- zeroSymbol 数字0的替换符号
let numberFormater = NumberFormatter();
numberFormater.zeroSymbol = "零";
let value = numberFormater.string(from: 0);
print("输出:\(value)"); // 输出 零
- positivePrefix、positiveSuffix、negativePrefix、negativeSuffix、currencyGroupingSeparator。正负数的前后缀。负数的前缀为 - 其他的都是空。可以自定义。
-
plusSign、minusSign、exponentSymbol、percentSymbol、perMillSymbol。加号符号,默认+。 减号符号, 默认为 -。指数符号,默认为E。数字的千分符号,默认为 ‰ 。货币符号分隔符
-
multiplier 乘数因子。
let number = 123456;
let nFromter = NumberFormatter();
nFromter.numberStyle = .decimal;
nFromter.multiplier = 0.0001
nFromter.allowsFloats = true;
nFromter.positiveSuffix = "万";
let valuesd = nFromter.string(from: NSNumber.init(value:
Float(number) * 1.0))!;
print("输出:\(valuesd)"); // 输出 : 12.346万
- formatWidth、paddingCharacter、paddingPosition、字符串的格式长度,默认为0。当位数不够填充字符。填充位置。
let formatter = NumberFormatter();
formatter.numberStyle = .decimal;
formatter.formatWidth = 5;
formatter.paddingPosition = .afterPrefix;
formatter.paddingCharacter = "**";
let value = formatter.string(from: 123)
print("输出:\(value!)") // 输出:**123
- roundingMode 舍入方式 向上取整,向下取整,默认四舍五入。roundingIncrement 保留到小数位 默认为0。
let formatter = NumberFormatter();
formatter.roundingIncrement = 0.01;
formatter.numberStyle = .decimal;
formatter.roundingMode = .ceiling;
let value = formatter.string(from: 123.3011)
print("输出:\(value!)") // 输出:123.31
// 小数点后两位,向上取整。
- minimumIntegerDigits、maximumIntegerDigits、minimumFractionDigits、maximumFractionDigits、 整数、小数的最多、少位数。
let formatter = NumberFormatter();
formatter.minimumIntegerDigits = 4;
formatter.maximumIntegerDigits = 5;
formatter.minimumFractionDigits = 3;
formatter.maximumFractionDigits = 4;
let value = formatter.string(from: 210234.56789)
print("输出:\(value!)") // 输出:10234.5679
后记:对于这个还有很多属性不太明确具体的作用是社么等待大家的探索,如果有知道的欢迎指导。