gpt4 book ai didi

objective-c - NSNumberFormatter iOS 大双值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:56 25 4
gpt4 key购买 nike

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

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

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。

然后我必须根据不同的区域设置格式化字符串:

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我明白了:“号码:1234567456785921”“翻译的字符串:1234567456785920”

这是 nsnumberformatter 的内在限制吗,因为文档对此没有说明,或者我做错了什么?

最佳答案

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

NSNumberdouble 支持,并且不能包含超过 15 个有效的十进制数字。另一方面,NSDecimalNumber 使用十进制算法,最多可容纳 32 位有效数字。

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

关于objective-c - NSNumberFormatter iOS 大双值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com