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。

相關問題