iOS NSNumberFormatter 数字格式化

18 篇文章 0 订阅
1 篇文章 0 订阅

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

 后记:对于这个还有很多属性不太明确具体的作用是社么等待大家的探索,如果有知道的欢迎指导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值