如何从floatValue获取NSDecimalNumber与float值具有相同的精度?

时间:2013-05-16 05:07:38

标签: objective-c nsdecimalnumber

我记录了两个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数据类型。

我怎样才能实现这一目标。谁能帮我吗。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

十进制数用 base-10算术表示。实例可以表示任何可以表示为尾数x 10 ^指数的数字,其中尾数是十进制整数

因此,小数后的0秒被截断。如果您需要明确,则需要使用floatdouble

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