ios - 使用 NSNumberFormatter 生成小数点后带有尾随零的数字

标签 ios swift double nsnumberformatter nslocale

在 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 所提到的,您可以将 minimumFractionDigitsmaximumFractionDigits 设置为相同的数字,这将强制始终显示许多小数位。要知道要显示多少个,您需要在小数点后取一个子字符串到末尾并计算其元素。为了知道是否所有小数位都是 0,我创建了一个辅助方法,将该子字符串转换为数字,如果它等于 0,那么您就知道它们都是 0。

不幸的是,您需要根据原始字符串编号使用几个不同的 NSNumberFormatter 将字符串转换为本地化数字。因此,如果它确实包含小数且其后的所有内容都是 0,那么您需要创建一个不同的格式化程序,将字符串转换为数字,然后将该数字转换为字符串,以便根据用户的区域设置显示它。否则,您可以只使用原始的数字格式化程序。

关于ios - 使用 NSNumberFormatter 生成小数点后带有尾随零的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601747/

相关文章:

iphone - App Store 更新后,iOS 应用程序是否会继续在后台运行?

iphone - 推送 UIViewController 时隐藏 UITabBarController 的标签栏

遍历二维矩阵的算法

java - 如何将字符串从 JTextField 转换为 double 组

c# - 如何在 C# 中反转 double[,]

ios - 如何在 Swift 中为 Int 数组(自定义字符串结构)实现 Hashable 协议(protocol)

ios - 如何在 SwiftUI (iOS) 中处理数据删除而不导致应用程序崩溃

ios - 如何覆盖 Swift 委托(delegate)方法以获取更多参数?

ios - swift 调用函数的问题

swift - 在 Swift 中使用 Neo4j Rest API