[英]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.