我很难将有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
- 得到他们的价值并将其总计加起来。所以我需要更多的准确性,而不仅仅是我现在得到的。
答案 0 :(得分:1)
虽然您可以获得NSString
整数或floatValue,但您应该使用NSNumberFormatter
。为什么?小数和分组分隔符在不同国家/地区之间有所不同,并且floatValue代码仅考虑。作为小数分隔符。因此,使用a的语言环境的用户注定要失败。
如何:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
float myFloat = [numberFormatter numberFromString:myString].floatValue;
答案 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
声明。如果我不提供货币(在将总和加在一起时不需要),我只是删除空格 - 这与我现有的代码一起完美运行。
感谢您的所有提示。