当我将 NSString 转换为 Float 高达2
小数位时,它会在点后自动获取6
精度。在点之后我只想要2
小数。据我所知,在Objective-C
创建 Float 时,它会分配内存来存储浮点数,比如8
个字节。
因此,如果我将12.15
分配给 Float 变量,它会将12.14999998
存储在该内存位置,当我获取该浮点数时,它将获取该值那个地方的号码给我。
答案 0 :(得分:1)
无法存储具有精确十进制数的float / double,也无法存储精确值:因为此类值的内部表示形式,以二进制形式存储。
如果您想要这样的确切值,则需要使用课程NSDecimalNumber
。
您可以通过以下方式填写您的号码:
NSDecimalNumber *myNumber = [NSDecimalNumber decimalNumberWithString:@"12.87"];
然后,你可以使用方法对它们进行数学计算:
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber
- (NSDecimalNumber *)decimalNumberBySubstracting:(NSDecimalNumber *)decimalNumber
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber
依旧......
NSDecimalNumber decimalNumberSum = [decimalNumberA decimalNumberByAdding:decimalNumberA];
答案 1 :(得分:1)
myFloat = round(myFloat*100) / 100.0;
这将使你摆脱第二个位置后的额外小数
答案 2 :(得分:-1)
float num = 12.34555;
NSString * str = [NSString stringWithFormat:@"%.2f",num];
NSLog(@"sr %@",str);
答案 3 :(得分:-2)
尝试一下......首先将NSString
转换为float
,然后给%0.2f获取浮动值,最多2个小数点。
示例代码:
NSString *string = @"3.45";
float floatValue = [string floatValue];
NSLog(@"%0.2f",floatValue);