NSNumberFormatter 不尊重科学风格的数字信息

发布于 2024-09-05 23:33:54 字数 933 浏览 3 评论 0原文

我正在尝试以科学的方式显示一些小数。我正在使用 NSDecimalNumber 和 NSNumberFormatter 对象。但是,在设置最小和最大位数时,原始数字中的一些信息似乎会丢失。例如,考虑以下代码示例:

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInt:3123400] decimalValue]];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];

NSString *result = [formatter stringFromNumber:dn];
// Expected: result is 3.12E6
// Actual: result is 3.10E6

[formatter release];

在这种情况下,我预计 NSString 变量结果等于 3.12E6。 setMinimumFractionDigits 和 setMaximumFractionDigits 调用将最终结果锁定在小数点后两位。不幸的是,第二个数字实际上是 0,而不是预期值 2。

将 setMinimumFractionDigits 和 setMaxiumFractionDigits 调用增加到 3,会产生结果 3.120E6。最后一位数字(在本例中为第三个小数位)再次保持为 0,而不是预期值 3。

为什么在这些情况下最后一位数字为 0?我是否缺少 NSNumberFormatter 的某些设置或配置?我使用的是 Xcode 版本 3.2.2。

I am trying to display some decimals in a scientific style. I'm using NSDecimalNumber and NSNumberFormatter objects. When setting the minimum and maximum number of digits though, some information from the original number seems to be lost. For example, consider the following code example:

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInt:3123400] decimalValue]];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];

NSString *result = [formatter stringFromNumber:dn];
// Expected: result is 3.12E6
// Actual: result is 3.10E6

[formatter release];

In this case, I would have expected the NSString variable result to equal 3.12E6. The setMinimumFractionDigits and setMaximumFractionDigits calls having locked the final result at 2 decimal places. Unfortunately, the second digit is actually a 0 instead of the expected value of 2.

Increasing the setMinimumFractionDigits and setMaxiumFractionDigits calls to 3, yields a result of 3.120E6. The last digit, in this case the third fraction digit, again remains 0 instead of the expected value of 3.

Why is the last digit 0 in these cases? Is there some setup or configuration of the NSNumberFormatter that I'm missing? I am using Xcode version 3.2.2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文