将 NSString 转换为 NSNumber 精度问题
Convert NSString to NSNumber precision issue
我有一个大约有 7 位小数的字符串:@"-28.1234212"
并且我想将其转换为 NSNumber
而不会丢失任何精度。当我执行以下操作时,我只得到小数点后 4 位。
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];
现在 convertedNum 是 -28.1234
而不是 -28.1234212
。
是否可以在不损失精度的情况下执行此操作?
更改数字格式化程序样式
[f setNumberStyle:kCFNumberFormatterNoStyle];
使用 kCFNumberFormatterNoStyle 样式
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:kCFNumberFormatterNoStyle];
NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];
NSLog(@"%@",convertedNum);
如果您追求精度,可以使用 NSDecimalNumber。
NSDecimalNumber *convertedNUm = [NSDecimalNumber decimalNumberWithString:@"-28.1234212"]
NSString *nowValue =@"-28.1234212";
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:kCFNumberFormatterNoStyle];
NSNumber * nowNum = [f numberFromString:nowValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:4]; //set max fraction digit
NSNumber *nowValueFormatted = [formatter stringFromNumber:nowNum];
NSLog(@"%@",nowNum);
NSLog(@"%@",nowValueFormatted);
这可能对你有帮助:)
为什么需要格式化程序?可以直接转换成NSNumber
NSString *douStr = @"-28.1234212";
NSNumber *num = [NSNumber numberWithDouble:douStr.doubleValue];
我有一个大约有 7 位小数的字符串:@"-28.1234212"
并且我想将其转换为 NSNumber
而不会丢失任何精度。当我执行以下操作时,我只得到小数点后 4 位。
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];
现在 convertedNum 是 -28.1234
而不是 -28.1234212
。
是否可以在不损失精度的情况下执行此操作?
更改数字格式化程序样式
[f setNumberStyle:kCFNumberFormatterNoStyle];
使用 kCFNumberFormatterNoStyle 样式
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:kCFNumberFormatterNoStyle];
NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];
NSLog(@"%@",convertedNum);
如果您追求精度,可以使用 NSDecimalNumber。
NSDecimalNumber *convertedNUm = [NSDecimalNumber decimalNumberWithString:@"-28.1234212"]
NSString *nowValue =@"-28.1234212";
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:kCFNumberFormatterNoStyle];
NSNumber * nowNum = [f numberFromString:nowValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:4]; //set max fraction digit
NSNumber *nowValueFormatted = [formatter stringFromNumber:nowNum];
NSLog(@"%@",nowNum);
NSLog(@"%@",nowValueFormatted);
这可能对你有帮助:)
为什么需要格式化程序?可以直接转换成NSNumber
NSString *douStr = @"-28.1234212";
NSNumber *num = [NSNumber numberWithDouble:douStr.doubleValue];