2014-01-22 3 views
0

Не уверен. Если я не собираюсь объяснять это правильно, пожалуйста, пожалуйста, со мной. Я начинаю с цифры, скажем, 250. Я добавляю все виды чисел, но в любое время я добавляю большое число, например 2000, оно добавляется правильно. Затем я добавляю 3. Новый номер выходит на 5, как считалось, 2000 было 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]; 
+0

Может ли быть какой-то локаль? Некоторые языки используют '.' как десятичный разделитель, другие используют', ' – tiguchi

ответ

0

Проблема заключается в использовании floatValue преобразовать форматированный текст номера к номеру. floatValue работает только в том случае, если текст неформатирован (без запятых) и использует период для десятичного разделителя.

Поскольку вы сохраняете отформатированное число в поле, оно работает только с небольшими числами и в определенных локалях.

Замените использование floatValue на текст с таким же NSNumberFormatter, который используется для форматирования номера. Используйте его, чтобы проанализировать текст и дать вам NSNumber (который вы можете затем позвонить floatValue).

+0

Большое вам спасибо! Это сработало. вместо .floatvalue, я использовал: float start = [[formatter numberFromString: self.amountLabel.text] floatValue]; и то же самое для changeAmount – Bomiz

0

Просто думаю, как это трудно, глядя на свой код, но, может быть, вы хотите:

float newValue = start; 

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