在Java中,DecimalFormat
支持
###.##
- > 3.14 0
- > 3 00.000
- > 03.142 #.##%
- > 314.16%pie is ###.##
- >馅饼是3.14 但我找不到Swift for iOS中的等效功能。
有NumberFormatter
,但不支持pie is ###.##
,并且在代码中设置所有属性不方便:
formatter.maximumFractionDigits = 2
formatter.numberStyle = .currencyAccounting
我很好奇是否支持Java和Java格式的格式。 Swift,在React Native中非常有用(在js中定义格式)
答案 0 :(得分:5)
(NS)NumberFormatter
有positiveFormat
和negativeFormat
属性,它们是根据Unicode Technical Standard #35的格式模式。这些似乎是兼容的
使用Java DecimalFormat
。
示例:
let posNumber = NSNumber(value: Double.pi)
let negNumber = NSNumber(value: -Double.pi)
let f1 = NumberFormatter()
f1.positiveFormat = "00.000"
print(f1.string(from: posNumber)!) // 03.142
print(f1.string(from: negNumber)!) // -03.142
let f2 = NumberFormatter()
f2.positiveFormat = "pie is ###.## "
print(f2.string(from: posNumber)!) // pie is 3.14
根据当前区域设置格式化数字(因此输出
也可以是3,14
。如果不是这样,请添加
f2.locale = Locale(identifier: "en_US_POSIX")
如果您没有设置negativeFormat
,请将正面格式设置为
前面的减号将用于负数。
这在第一个示例中效果很好,但不适用于自定义文本:
print(f2.string(from: negNumber)!) // -pie is 3.14
这可以通过设置正面和负面格式来解决:
let f3 = NumberFormatter()
f3.positiveFormat = "Result is 00.000"
f3.negativeFormat = "Result is -00.000"
print(f3.string(from: posNumber)!) // Result is 03.142
print(f3.string(from: negNumber)!) // Result is -03.142
在macOS上,format
属性可以改为使用
和(可选)否定格式用分号分隔。
在上面的例子中将是:
f2.format = "pie is ###.##"
f3.format = "Result is 00.000;Result is -00.000"