添加后浮动值重置

时间:2014-01-22 00:15:45

标签: ios objective-c uilabel nsnumberformatter

我从一个数字开始,比方说250.我添加各种数字,但无论何时我添加一个像2,000这样的高数字,它都会正确添加。然后我添加3.新的数字出来5,就像它认为2,000是2.0。我不知道为什么会这样做。

float start = self.amountLabel.text.floatValue;
float changeAmount = self.amountField.text.floatValue;
float newValue;
if (determConfirm == 1) {
    newValue = start + changeAmount;
} else {
    newValue = start - changeAmount;
}

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

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

[formatter setMaximumFractionDigits:5];

[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:newValue]];

[[NSUserDefaults standardUserDefaults] setValue:numberString forKey:@"newValue"];
[[NSUserDefaults standardUserDefaults] synchronize];

self.amountLabel.text = numberString;
self.amountField.text = @"0.00";
[self.amountField resignFirstResponder];

2 个答案:

答案 0 :(得分:0)

通过查看代码很难猜测,但也许你想要这个:

float newValue = start;

if (determConfirm == 1) {
    newValue += changeAmount;
} else {
    newValue -= changeAmount;
}

答案 1 :(得分:0)

问题是使用floatValue将格式化的数字文本转换为数字。 floatValue仅在文本未格式化(无逗号)时使用,并且使用小数分隔符的句点。

由于您在字段中存储格式化的数字,因此它仅适用于较小的数字和某些区域设置。

将文本上floatValue的使用替换为用于格式化数字的NSNumberFormatter。使用它来解析文本并为您提供NSNumber(然后您可以调用floatValue)。