gpt4 book ai didi

ios - 带有 2 个小数点的 NSNumberFormatter 导致奇怪的结果

转载 作者:行者123 更新时间:2023-11-28 18:29:50 25 4
gpt4 key购买 nike

我尝试将浮点值转换为字符串并使用 NSNumberFormatter。我做了一个舍入函数并使用格式化程序来表示字符串。格式化程序应该只做语言环境和十进制符号。我最终得到了一个错误的值。结果

NSNumberFormatter *_numberFormatter = [[NSNumberFormatter alloc] init];
[_numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[_numberFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]];
[_numberFormatter setMaximumFractionDigits:2];
[_numberFormatter setRoundingMode: NSNumberFormatterRoundDown];
NSString* sumString = [_numberFormatter stringFromNumber:[NSNumber numberWithFloat:14.2f]];

是 '14,19'。我不明白为什么这里的小数点只有 1 时值会向下舍入。舍入模式在这里什么都不做,或者我错了。我可以使用“NSNumberFormatterRoundUp”,但在某些情况下结果可能是“14,21”?

最佳答案

这里的问题是 base-2 float (这是所有 Apple 平台使用的)不能准确表示实数 14.2。最接近的 double float 正好是 14.199999999999999289457264239899814128875732421875。如您所见,这略低于 14.2。

您指定了 NSNumberFormatterRoundDown 舍入模式。这意味着格式化程序将打印符合您的格式(两位小数)且小于或等于输入数字的最大数字。小于等于14.199999999999999289457264239899814128875732421875的两位小数的最大十进制数是14.19。

如果您正在处理货币值,您可能需要查看 NSDecimalNumberNSDecimalNumberdouble 慢很多,但它是一种以 10 为底的浮点格式,所以它可以精确表示 14.2。

关于ios - 带有 2 个小数点的 NSNumberFormatter 导致奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35142332/

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