OS X App使用逗号转换文本字段导致双值问题

Posted

技术标签:

【中文标题】OS X App使用逗号转换文本字段导致双值问题【英文标题】:OS X App converting textfield with comma causing issues with double value 【发布时间】:2018-02-02 22:36:48 【问题描述】:

我正在创建一个 OS X 应用程序,当我这样做时:

var tempVal = 10495.33
tempTextField.doubleValue = self.tempVal 

显示如下:10,495.33。注意逗号。

现在,当我在 NSTextField 中将该值修改为 30,400.34 并尝试将其分配回 doubleValue 时,事情就搞砸了。

tempVal = tempTextField.doubleValue //Now this makes tempVal = 30 instead of 30,400.34

这都是因为逗号。没有逗号,一切都很好。

我知道有一个不好的解决方法,我只是从数字字符串中删除所有逗号,但我觉得有更好/正确的方法来做到这一点。

【问题讨论】:

你的问题不清楚。您是在尝试创建整数还是浮点字段?如果它是一个浮点字段,是否有固定数量的小数位数或可以有任何? Btw 10495 是整数,逗号是分组分隔符还是分数分隔符? 它始终是小数,这就是我使用双精度的原因 再一次,10495 应该是 10000 还是 10.495? 10495 应该是一万四百九十五,但是因为逗号,它变成了 10。我不知道为什么它会在逗号后面切掉所有内容。它不应该是 10.495。当我在我的文本字段中添加一个数字格式化程序时,它会在我这样做tempTextField.doubleValue = self.tempVal 时删除逗号,这很好,但如果我想保留逗号,还有其他方法可以做到这一点吗? 为什么不在文本字段中添加数字格式化程序?它会解决你的问题。 【参考方案1】:

此问题很可能是由您的系统设置引起的。显然(不知道为什么)您应该以类似美国的格式输入数字(使用“.”作为小数分隔符),但文本字段的输出取决于您的系统设置。因此,如果您在欧洲,您很可能使用“,”作为小数分隔符

你可以这样修复(你配置了NSTextField的格式,所以你输入的数据不需要格式化)

//This codes works in swift 4
//This should be your textfield. It is either programmed or you link it through storyboard
var myTextField                = NSTextField()

//This is a formatter. You can set it up how to format the textfield
var myFormat                = NumberFormatter()
myFormat.decimalSeparator   = "."
myFormat.numberStyle        = .decimal

//Now you connect the two
myTextField.formatter       = myFormat

【讨论】:

我遇到了同样的问题,我的系统设置设置为美国。系统首选项中的示例字符串甚至显示千位分隔符的逗号和分数分隔符的小数。

以上是关于OS X App使用逗号转换文本字段导致双值问题的主要内容,如果未能解决你的问题,请参考以下文章

将其字段中带有逗号的 .csv 文件转换为 JSON/TXT

无法将文本字段设置为仅数字和逗号/点

将文件中的双值数字读入 C++ 中的向量并访问它们的值

我无法使用 bigquery 将数字转换为 float64,不断出现错误的双值错误

应用程序获取冻结白色设置双值以使用打字机编辑文本以进行 2 编辑文本

如何使 UIButton 导致 UITextField 开始编辑文本