Как не показывать ненужные нули при заданных целых числах, но при необходимости иметь ответы float
У меня есть приложение, которое я разрабатываю, и одна из моих функций дает ответы в плавающих или двойных значениях, когда это необходимо, и целое число, когда ответ-целое число
Так, например, если ответ выходит на 8.52, ответ становится 8.52, но когда ответ 8, ответ 8 вместо 8.0000, я не хочу, чтобы он показывал все дополнительные 0.
- (IBAction) equalsbutton {
NSString *val = display.text;
switch(operation) {
case Plus :
display.text= [NSString stringWithFormat:@"%qi",[val longLongValue]+[storage longLongValue]];
case Plus2 :
display.text= [NSString stringWithFormat:@"%f",[val doubleValue]+[storage doubleValue]];
этот код не работает
4 ответов
эти описатели стандартные спецификаторы формата IEEE, что означает, что вы можете делать вещи, как %.2f
для отображения только 2 десятичных знаков в переменной float.
вы также можете преобразовать его в int
, а затем использовать %d
спецификатор формата, если вы хотите сделать это таким образом.
тут же документация Apple на эту тему.
EDIT: основываясь на вашем комментарии к другому сообщению, похоже вы ищете %g
, который по существу удалит посторонние 0 из поплавков.
display.text= [NSString stringWithFormat:@"%g",[val doubleValue]+[storage doubleValue]];
я нашел ответ здесь: используйте printf для форматирования поплавков без десятичных знаков, если только трейлинг 0s
изменить форматирование
вот способ, которым я сделал это, когда мне нужно было отобразить валюту (но целые числа, если валюта была круглым числом.
Сначала мы получаем сумму денег в качестве строки
NSString *earnString = _money.payout.displayableAmount;
NSMutableString *strippedString = [NSMutableString
stringWithCapacity:earnString.length];
//сканируйте строку, чтобы удалить что-либо, кроме чисел (включая десятичные дроби)
NSScanner *scanner = [NSScanner scannerWithString:earnString];
NSCharacterSet *numbers = [NSCharacterSet
characterSetWithCharactersInString:@"0123456789"];
while ([scanner isAtEnd] == NO) {
NSString *buffer;
if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
[strippedString appendString:buffer];
} else {
[scanner setScanLocation:([scanner scanLocation] + 1)];
}
}
//create an int with this new string
int earnInt = [strippedString intValue];
//если строка меньше 100, то у нас было только "изменение", поэтому отобразите эту сумму если (earnInt
/ / если у нас есть число, равномерно делимое на 100, то у нас есть целая сумма в долларах, покажите это правильно }else if (earnInt % 100 == 0){
//The amount is exactly a dollar, display the whole number
NSString *wholeDollar = [NSString stringWithFormat:@"$%i", (earnInt/100)];
earnAmount.text = wholeDollar;
//наконец, если у нас есть смешанное число, то поместите их обратно вместе с десятичным числом между ними.
}else{
//Dollar amount is not exactly a dollar display the entire amount
NSString *dollarString = [NSString stringWithFormat: @"$%0d.%02d", (earnInt / 100), (earnInt % 100)];
earnAmount.text = dollarString;
}
надеюсь, это поможет вам из...
вы можете попробовать этот метод вызова:
[NSString stringWithFormat:@"%.0f", [val doubleValue] + [storage doubleValue]];
самый простой способ-NSNumberFormatter. Он будет отображать только decimal, если это необходимо. Пример (Свифт):
let num1: Double = 5
let num2: Double = 5.52
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = .DecimalStyle
print(numberFormatter.stringFromNumber(NSNumber(double: num1)))
print(numberFormatter.stringFromNumber(NSNumber(double: num2)))
это будет печатать 5, а затем 5.52.