0

我记录了两个NSDecimalNumber

NSLog(@"%@",[[NSDecimalNumber alloc] initWithFloat:2.675f]);
NSLog(@"%@",[[NSDecimalNumber alloc] initWithFloat:2.000f]);

我在控制台中得到了结果

10:26 2013-05-16 10:23:20.807 SampleTest[1097:19d03] 2.674999952316284416
2013-05-16 10:23:22.484 SampleTest[1097:19d03] 2

我的预期结果是2.0000。小数点后可以有任意数量的零,但小数点后至少应该有一个零。我很难更改NSDecimalNumber数据类型。

我怎样才能做到这一点。谁能帮我吗。提前致谢。

4

1 回答 1

0

因为十进制数是以10 为底的算术表示的。一个实例可以表示任何可以表示为尾数 x 10^exponent 的数字,其中尾数是十进制整数

因此小数点后的 0 被截断。如果你想明确那么你需要使用floator double

NSDecimalNumber *deciA=[NSDecimalNumber decimalNumberWithMantissa:2675 exponent:-3 isNegative:NO]; 
NSDecimalNumber *deciB=[NSDecimalNumber decimalNumberWithMantissa:2000 exponent:-3 isNegative:NO];

    NSLog(@"deciA is %@",deciA);
    NSLog(@"deciB is %@",deciB);

输出:

deciA 是 2.675

desiB 是 2

你可以这样做:

NSDecimalNumber *deciA=[[NSDecimalNumber alloc] initWithFloat:2.675f];
NSDecimalNumber *deciB=[[NSDecimalNumber alloc] initWithFloat:2.000f];
NSLog(@"deciA is %.3lf",[deciA doubleValue]);
NSLog(@"deciB is %.3lf",[deciB doubleValue]);

输出:

deciA 是 2.675

desiB 是 2.000

于 2013-05-16T06:16:15.320 回答