繁体   English   中英

NSNumber浮动值

[英]NSNumber to float Value

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

我怎么能这样做?

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

我的问题陈述:

 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,转换为unsigned int并对其执行算术,转换回float或double并除以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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM