111...1111 - 111...1110 应等于 1
NSLog(@"%@", [[NSDecimalNumber decimalNumberWithString:@"1111111111111111111111111111111111111111"] decimalNumberBySubtracting:[NSDecimalNumber decimalNumberWithString:@"1111111111111111111111111111111111111110"]]);
我正在使用 decimalNumberBySubtracting:
来计算它,但我得到了 0。
除了 stringValue,我没有将它更改为任何形式的值,所以我认为它不应该有任何精度损失。
结果:
这是一个错误吗?我在谷歌上试过,它也回答 0。
最佳答案
你的代码一定有问题。
NSDecimalNumber *x = [NSDecimalNumber decimalNumberWithString:@"1111111111111111"];
NSDecimalNumber *y = [NSDecimalNumber decimalNumberWithString:@"1111111111111110"];
assert([[x decimalNumberBySubtracting:y] isEqualToNumber:[NSDecimalNumber decimalNumberWithString:@"1"]]);
编辑
您的问题和原始计算器图像显示两个 16 位数字。
但是,您的调试器输出显示您实际使用的数字要大得多。计算数字中有效数字的个数,然后阅读 NSDecimalNumber
文档的第一段,然后回答您自己的问题。为了便于使用,我将在此处包含文档中的摘要段落。
NSDecimalNumber
, an immutable subclass ofNSNumber
, provides an object-oriented wrapper for doing base-10 arithmetic. An instance can represent any number that can be expressed as mantissa x 10^exponent where mantissa is a decimal integer up to 38 digits long, and exponent is an integer from –128 through 127.
关于ios - NSDecimalNumber 计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883579/