将NSString编号转换为float

时间:2014-06-04 10:10:17

标签: ios objective-c nsstring

我很难将有NSString的数字转换为floats或更有用的东西。

我尝试过以下代码:

NSString *mystring = @"123"
    int currentBidAmount = [myString integerValue];

没问题。

然后float

NSString *mystring = @"123.95"
        float currentBidAmount = [myString floatValue];

再次,没问题

但是当myString有三位小数时 - 我得到一个不准确的数字。例如:

NSString *mystring = @"1.123.95"
            float currentBidAmount = [myString floatValue];

打印出来:1

有人能告诉我这里做错了什么吗?

目标是让两个NSString - 得到他们的价值并将其总计加起来。所以我需要更多的准确性,而不仅仅是我现在得到的。

3 个答案:

答案 0 :(得分:1)

虽然您可以获得NSString整数或floatValue,但您应该使用NSNumberFormatter。为什么?小数和分组分隔符在不同国家/地区之间有所不同,并且floatValue代码仅考虑。作为小数分隔符。因此,使用a的语言环境的用户注定要失败。

如何:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
float myFloat = [numberFormatter numberFromString:myString].floatValue;

在此处阅读各种设置:https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/NSNumberFormatter_Class/Reference/Reference.html

答案 1 :(得分:0)

你不能为逗号值加上两个逗号

此代码适用于鳍:

       NSString *example = @"13124.4153";
       float floatValue = [example floatValue];
       NSLog(@"value = %f", floatValue);

答案 2 :(得分:0)

感谢帮助人员。我设法解决了这个问题。问题是分组分隔符。它通过留下空间分开。所以这就是为什么我有不准确的数字。现在,因为我需要所有的数字保持这种格式,但在我进行计算时改变(将总和加在一起 ​​- 我写了一个看起来像这样的类方法:

(NSString *)getDisplayAmountStringWithValue: (NSString *)value Currency: (NSString *)currency
{
    NSDecimalNumber *decimalValue = [NSDecimalNumber decimalNumberWithString:[value stringByReplacingOccurrencesOfString:@"," withString:@""]];

    if ([decimalValue isEqualToNumber:[NSDecimalNumber notANumber]]){
            decimalValue = [NSDecimalNumber decimalNumberWithString:@"0"];
    }

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setGroupingSeparator:@" "];
    [formatter setDecimalSeparator:@"."];
    [formatter setMaximumFractionDigits:2];
    [formatter setMinimumFractionDigits:2];

    if ([currency length] > 0){

            [formatter setPositivePrefix:[NSString stringWithFormat:@"%@", currency]];
            [formatter setNegativePrefix:[NSString stringWithFormat:@"%@-", currency]];
    }else {
            [formatter setGroupingSeparator:@""];

    }

    NSString *newNumberString = [formatter stringFromNumber:decimalValue];

    return newNumberString;
}

请注意if声明。如果我不提供货币(在将总和加在一起时不需要),我只是删除空格 - 这与我现有的代码一起完美运行。

感谢您的所有提示。