Objective c 如何从精度与浮点值相同的floatValue中获取NSDecimalNumber?

Objective c 如何从精度与浮点值相同的floatValue中获取NSDecimalNumber?,objective-c,nsdecimalnumber,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

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

我怎么能做到呢。有人能帮我吗。
提前感谢。

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

因此,小数点后的0被截断。如果您想要明确,那么您需要使用
float
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);
输出:

分贝是2.675

德西布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]);
输出:

分贝是2.675

desiB是2000


使用NSDecimalNumber有什么限制吗?将float转换为int并附加0。@Sunny:是的,我需要将float值转换为NSDecimalNumber类,即使我附加0,NSDecimalNumber类也不会给我精度(小数点后的值),我可以得到这样的值。但我希望NSDecimalNumber具有精度我有一个DB,它的数据格式是NSDecimalNumber,所以我无法更改datatype@Pavitra:NSDecimalNumber表示十进制数,但它不关心输出格式。NSDecimalNumber的“2”和“2.0000”完全相同。NSDecimalNumber与
%@
的输出只给出了一些表示。如果要以给定精度打印数字,必须转换为double并使用
%f
输出格式(如Anoop所述)。或者,您可以使用NSNumberFormatter将NSDecimalNumber转换为字符串。@Martin:我想将此值作为decimal(2.0)传递给服务器。@Pavitra:您的服务器将不知道NSDecimal。这必须是基于Java的服务器,需要浮点数或十进制数。