【发布时间】:2014-10-28 05:57:44
【问题描述】:
在 Swift 中,您将如何创建一个 NSNumberFormatter 来保留小数点 (12.000) 后的尾随零,同时生成适合当前语言环境的数字?
我当前的代码和示例输出:
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.locale = NSLocale.currentLocale()
formatter.maximumFractionDigits = 10
var doubleNumString = "12.0"
println(formatter.numberFromString(doubleNumString)) //in English it prints 12, want it to print 12.0
var doubleNumString = "12.000"
println(formatter.numberFromString(doubleNumString)) //prints 12, want it to print 12.000
var doubleNumString = "12.125"
println(formatter.numberFromString(doubleNumString)) //prints 12.125 as expected
var doubleNumString = "1234"
println(formatter.numberFromString(doubleNumString)) //prints 1,234 as expected
我已经对其进行了编码,如果字符串以小数 ("12.") 结尾,则它不会使用此格式化程序来生成数字,而是只显示数字,然后显示小数(但我需要改善这一点,因为某些语言从右到左阅读)。
一种解决方案是检查字符串是否包含句点,如果是,则检查其后面的所有数字是否为 0,如果是,则不要通过数字格式化程序运行它,而是只运行 int 值通过格式化程序然后附加/前置小数点后跟适当数量的 0。
有更好/更清洁的解决方案吗?
【问题讨论】:
-
一个 number 没有尾随零,只有它的 string 表示。 "12.0" 和 "12.000" 转换为 数字 给出完全相同的结果,并且无法将它们区分为数字。 – 为什么不能只使用字符串本身?
-
@Martin 因为字符串始终为英文格式,并且输出数字需要遵守当前的语言环境,但如果字符串中存在尾随零,则还要保留它们。
-
然后您可以转换字符串->数字->字符串,但您必须计算尾随零的数量并将其设置为 minimum+maximumFractionDigits 以进行第二次转换。也许这有帮助,目前没有时间尝试并写一个答案。
标签: ios swift double nsnumberformatter nslocale