将NSString转换为NSNumber精度问题

时间:2015-01-07 05:43:24

标签: ios nsstring nsnumber

我有一个大约7个小数位的字符串:@"-28.1234212"

我希望将其转换为NSNumber而不会失去任何精确度。当我执行以下操作时,我最终只会得到4位小数。

 NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];

现在,convertNum为-28.1234而不是-28.1234212

是否可以在不损失精度的情况下执行此操作?

4 个答案:

答案 0 :(得分:2)

更改数字格式样式

   [f setNumberStyle:kCFNumberFormatterNoStyle];

使用kCF NumberFormatter样式

   NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:kCFNumberFormatterNoStyle];
    NSNumber* convertedNum = [f numberFromString:@"-28.1234212"];

    NSLog(@"%@",convertedNum);

答案 1 :(得分:1)

如果您正在寻找精确度,可以使用NSDecimalNumber。

NSDecimalNumber *convertedNUm = [NSDecimalNumber decimalNumberWithString:@"-28.1234212"]

答案 2 :(得分:1)

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

这可能对你有帮助:)

答案 3 :(得分:0)

为什么需要格式化程序?您可以直接将其转换为NSNumber

NSString *douStr = @"-28.1234212";
NSNumber *num = [NSNumber numberWithDouble:douStr.doubleValue];