7

我有一个正在开发的应用程序,我的一个功能是在需要时以浮点值或双精度值给出答案,当答案是整数时给出整数

因此,例如,如果答案为 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

4 回答 4

13

这些说明符是标准的 IEEE 格式说明符,这意味着您可以做一些事情,比如%.2f只在浮点变量上显示 2 个小数位。

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

这也是Apple关于该主题的文档。

编辑:根据您对另一篇帖子的评论,看起来您正在寻找%g,这将从本质上删除多余的 0 从浮点数中。

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

我在这里找到了答案:如果只有尾随 0,则使用 printf 格式化不带小数位的浮点数

于 2013-10-29T20:03:05.583 回答
0

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

[NSString stringWithFormat:@"%.0f", [val doubleValue] + [storage doubleValue]];
于 2013-10-29T20:03:13.503 回答
0

编辑格式

这是我在需要显示货币时执行此操作的一种方式(如果货币是整数,则为整数。

首先,我们将金额作为字符串

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,那么我们只有“更改”,所以显示金额 if(earnInt < 100){ //美元金额小于美元,只显示美分和美分符号 NSString *centString = [NSString stringWithFormat :@"%i¢", EarnInt]; EarnAmount.text = centString;

//如果我们有一个能被 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;

}

希望这可以帮助你...

于 2013-10-29T21:45:16.590 回答
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。

于 2016-06-02T15:10:24.720 回答