将 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];