在 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。
有更好/更清洁的解决方案吗?
最佳答案
正如 Martin R 所提到的,您可以将 minimumFractionDigits
和 maximumFractionDigits
设置为相同的数字,这将强制始终显示许多小数位。要知道要显示多少个,您需要在小数点后取一个子字符串到末尾并计算其元素。为了知道是否所有小数位都是 0,我创建了一个辅助方法,将该子字符串转换为数字,如果它等于 0,那么您就知道它们都是 0。
不幸的是,您需要根据原始字符串编号使用几个不同的 NSNumberFormatter
将字符串转换为本地化数字。因此,如果它确实包含小数且其后的所有内容都是 0,那么您需要创建一个不同的格式化程序,将字符串转换为数字,然后将该数字转换为字符串,以便根据用户的区域设置显示它。否则,您可以只使用原始的数字格式化程序。
关于ios - 使用 NSNumberFormatter 生成小数点后带有尾随零的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601747/