是否有与Java和Swift兼容的格式描述?

时间:2017-03-15 05:28:23

标签: ios swift number-formatting nsnumberformatter

在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中定义格式)

1 个答案:

答案 0 :(得分:5)

(NS)NumberFormatterpositiveFormatnegativeFormat 属性,它们是根据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"