NSNumber浮动值

时间:2013-02-26 11:15:13

标签: ios

当我使用'floatValue'将NSNumber转换为浮点值时,精度会有所不同。例如,我有NSNumber'myNumber',其值为2.3,如果我使用'floatValue'将myNumber转换为float,则其值为2.29999。但我需要2.30000。 2.3之后零的数量没有问题,我需要'2.3'而不是'2.9'。

我该怎么办?

4 个答案:

答案 0 :(得分:7)

我有类似的情况,我正在读取值并再次将其分配给浮点变量。

我的问题陈述:

 NSString *value = @"553637.90";
 NSNumber *num = @([value floatValue]); // 1. This is the problem. num is set to 553637.875000     
 NSNumberFormatter *decimalStyleFormatter = [[NSNumberFormatter alloc] init];
 [decimalStyleFormatter setMaximumFractionDigits:2];
 NSString *resultString = [decimalStyleFormatter stringFromNumber:num]; // 2. string is assigned with rounded value like 553637.88
 float originalValue = [resultString floatValue]; // 3. Hence, originalValue turns out to be 553637.88 which wrong.

以下更改行后为我工作:

    NSNumber *num = @([value doubleValue]); // 4. doubleValue preserves value 553637.9
    double originalvalue = [resultString doubleValue]; // 5. While reading back, assign to variable of type double, in this case 'originalValue'

我希望这会有所帮助。 :)

答案 1 :(得分:3)

如果您需要精确的精确度,请不要使用float。如果您需要更高的精度,请使用double。这仍然不准确。您可以将myNumber乘以10,转换为unsigned int并对其执行算术,转换回float或double并除以10,最终结果可能更精确。如果这些都不够精确,您可能需要查看任意精度算术库,例如GNU MP Bignum

答案 2 :(得分:1)

我已完成以下操作,但它正确地向我显示

NSNumber *num = [NSNumber numberWithFloat:2.3];
float f = [num floatValue];
NSLog(@"%f", f);

答案 3 :(得分:0)

你可以玩这样的东西:

  float x = 2.3f;
NSNumber *n = [NSNumber numberWithFloat:x];
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"0.#"];
NSString *s = [fmt stringFromNumber:n];
float f = [s floatValue];