在Swift中,如何创建一个NSNumberFormatter
来保留小数点后的零(12.000),同时还生成适合当前语言环境的数字?使用NSNumberFormatter在十进制后生成尾随零的数字
我当前的代码和示例输出:
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。
是否有更好的/更清洁的解决方案?
A *编号*不具有尾随零,只有其* *字符串表示。将“12.0”和“12.000”转换为*号*给出完全相同的结果,并且无法将它们区分为数字。 - 为什么你不能只使用字符串本身? – 2014-10-28 06:13:45
@Martin,因为字符串始终为英文格式,并且输出数字需要尊重当前语言环境,但如果它们存在于字符串中,则还会保留任何尾随零。 – Joey 2014-10-28 06:22:25
然后你可以转换string-> number-> string,但是你必须计算尾随零的数量并将其设置为第二次转换的minimum + maximumFractionDigits。也许这有帮助,现在没有时间去尝试并写出答案。 – 2014-10-28 06:31:58