NSNumber浮动值

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

我怎么能这样做?

我有类似的情况,我正在读值,并重新分配给浮动variables。

我的问题陈述:

  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' 

我希望这会有所帮助。 🙂

如果您需要准确的精度,请不要使用float 。 如果你需要更好的精度,请使用double精度。 这仍然不是确切的。 你可以将myNumber乘以10,转换为一个无符号整数,并对其进行算术运算,将其转换为浮点数或双精度除以10,最终结果可能更精确。 如果这些都不够精确,那么您可能需要查看一个任意精度的算术库,例如GNU MP Bignum 。

我做了以下,但它正确地显示我

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

你可以玩这样的事情:

  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];