如何将nsstring转换为在目标C中浮动最多2个小数位?

时间:2015-05-07 04:30:38

标签: ios objective-c

当我将 NSString 转换为 Float 高达2小数位时,它会在点后自动获取6精度。在点之后我只想要2小数。据我所知,在Objective-C创建 Float 时,它会分配内存来存储浮点数,比如8个字节。

因此,如果我将12.15分配给 Float 变量,它会将12.14999998存储在该内存位置,当我获取该浮点数时,它将获取该值那个地方的号码给我。

4 个答案:

答案 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);