6

我有一个正在开发的应用程序,我的一个功能是在需要时给出float或double值的答案,而当答案是整数如何在给定整数时不显示不必要的零,但在需要时仍然有浮动答案

所以例如,如果答案出来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]]; 

这段代码似乎没有工作

回答

12

这些说明是standard IEEE format specifiers,这意味着你可以做这样的事情%.2f,只会显示在浮点型变量2位小数。

您也可以将它转换为int,然后使用%d格式说明符如果您想这样做。

关于这个问题,这里还有Apple's documentation

编辑:根据您对另一篇文章的评论,它看起来像你正在寻找%g,这将基本上从浮游物中删除多余的0。

display.text= [NSString stringWithFormat:@"%g",[val doubleValue]+[storage doubleValue]]; 

我在这里找到了答案:Use printf to format floats without decimal places if only trailing 0s

+0

谢谢你这个工作,我想要的方式! – user2933653

0

你可以试试这个方法调用:

[NSString stringWithFormat:@"%.0f", [val doubleValue] + [storage doubleValue]]; 
+0

我这样做了,但它似乎使它在0指定它可以使用的所有小数的数量。我使用.1f然后答案8.555555会出来8.5只我想让答案8.555555但不是答案像8.500000我想显示在小数没有额外的零 – user2933653

+0

请参阅编辑我的答案做你所做的寻找 –

0

编辑格式化

这是一种方式,我这样做,当我需要显示货币(但是如果货币是整数,则为整数)。

首先我们得到的金额作为字符串

NSString *earnString = _money.payout.displayableAmount; 

NSMutableString *strippedString = [NSMutableString 
            stringWithCapacity:earnString.length]; 

//扫描串删除任何东西,但数字(包括小数点)

NSScanner *scanner = [NSScanner scannerWithString:earnString]; 
NSCharacterSet *numbers = [NSCharacterSet 
          characterSetWithCharactersInString:@""]; 

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则我们只有“更改”,所以显示金额 如果(赚到的钱< 100)//美元数额少于美元只显示美分和美分符号 NSString * centString = [NSString stringWithFormat:@“%i¢” ,earnInt]; earnAmount.text = centString;

//如果我们有一个数由100整除则有全金额,显示的是正确 }否则如果(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; 

} 

希望这可以帮助你......

0

的最简单方法,就是NSNumberFormatter。它只会在需要时显示小数。示例(斯威夫特):

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。

相关问题