首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSNumberFormatter iOS大双精度值

NSNumberFormatter iOS大双精度值
EN

Stack Overflow用户
提问于 2012-03-10 22:44:51
回答 2查看 3.5K关注 0票数 3

我在格式化大数字时遇到了问题。

我首先将一个字符串格式化为一个数字,因为我需要保存一个字符串,所以我从它获得了stringValue:

代码语言:javascript
复制
formatter = [[NSNumberFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setUsesSignificantDigits:NO];
[formatter setMaximumFractionDigits:6];
[formatter setMinimumFractionDigits:0];
[formatter setGroupingSeparator:@""];
value = [formatter numberFromString:textField.text];
label = [value stringValue]

一切正常,也就是说,如果我输入123456745678592.6,我会得到123456745678592.6。

然后,我必须格式化字符串,因为不同的语言环境:

代码语言:javascript
复制
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setGroupingSeparator:@""];
[numberFormatter setUsesSignificantDigits:NO];
[numberFormatter setMinimumFractionDigits:0];
[numberFormatter setMaximumFractionDigits:6];
tempString = myNumberString;
NSLog(@"number: %@",[NSNumber numberWithDouble:[tempString doubleValue]]);
tempString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[tempString doubleValue]]];
NSLog(@"string translated: %@",tempString);

我得到了这个:“数字: 123456745678592.6”“字符串翻译: 123456745678593”

当有意义的数字大于15时,就会发生这种舍入。

假设我输入: 12345674567859.2,然后我得到正确的数字,即“数字: 12345674567859.2”“字符串翻译: 12345674567859.2”

使用: 12345674567859.23我得到:“数字: 12345674567859.23”“字符串已翻译: 12345674567859.2”

但如果使用: 1234567456785921,我会得到这样的结果:"number: 1234567456785921“”字符串已翻译: 1234567456785920“

这是不是nothing格式化程序的固有限制,因为文档对此只字不提,还是我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2012-03-11 03:00:54

你能查查这个号码的实际类别是什么吗?是NSNumber还是NSDecimalNumber

NSNumberdouble备份,其有效小数位数不能超过15位。另一方面,NSDecimalNumber使用十进制算术,最多可容纳32位有效数字。

我已经了解到NSDecimalFormatter无法正确地格式化NSDecimalNumber%s(请参阅iOS: formatting decimal numbers)。但是也许它可以从一个字符串正确地创建一个NSDecimalNumber

票数 1
EN

Stack Overflow用户

发布于 2012-03-10 23:28:35

我认为问题不在于NSNumberFormatter的限制,而在于double本身的限制。

Objective-C中的双精度值的最大值是15位,我认为这是关于您的程序中发生的事情的一个很好的线索。

我认为当你这样做的时候

代码语言:javascript
复制
[NSNumber numberWithDouble:[tempString doubleValue]]];

您正在限制NSNumber的值,因为doubleValue将有一个限制!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9647306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档