【问题标题】:How do I change the number of decimal places iOS?如何更改 iOS 的小数位数?
【发布时间】:2011-11-23 18:29:52
【问题描述】:

我有一个简单的计算器应用程序,我希望它是这样,如果答案不需要小数位,就没有小数位,只有整数。如果答案是 2,我不想让它说 2.000000,它应该说 2。如果它需要一位小数,它应该显示到一位小数,例如 12.8 而不是 12.80。我该怎么做?这是我的代码。 顺便说一句,这是来自http://www.youtube.com/watch?v=Ihw0cfNOrr4 的教程,不是我自己的作品。

viewcontroller.h

#import <UIKit/UIKit.h>

interface calcViewController : UIViewController {

float result;
IBOutlet UILabel *calculatorScreen;
int currentOperation;
float currentNumber;

}


-(IBAction)buttonDigitPressed:(id)sender;
-(IBAction)buttonOperationPressed:(id)sender;
-(IBAction)cancelInput;
-(IBAction)cancelOperation;



@end

在.m中

#import "calcViewController.h"

@implementation calcViewController



-(IBAction)buttonDigitPressed:(id)sender {


currentNumber = currentNumber *10 + (float)[sender tag];
calculatorScreen.text = [NSString stringWithFormat:@"%2f", currentNumber];

}

-(IBAction)buttonOperationPressed:(id)sender {
if (currentOperation ==0) result = currentNumber;
else {


switch (currentOperation) {
    case 1:
        result = result + currentNumber;
        break;
    case 2:
        result = result - currentNumber;
        break;
    case 3:
        result = result * currentNumber;
        break;
    case 4:
        result = result / currentNumber;
        break;
    case 5:
       currentOperation = 0;
        break;




}
}
currentNumber = 0;
calculatorScreen.text = [NSString stringWithFormat:@"%2f", result];
if ([sender tag] ==0) result=0;
currentOperation = [sender tag];

}

-(IBAction)cancelInput {

currentNumber =0;
calculatorScreen.text = @"0";

}


-(IBAction)cancelOperation {



currentNumber = 0;
calculatorScreen.text = @"0";
currentOperation = 0;

}

【问题讨论】:

    标签: ios xcode calculator


    【解决方案1】:

    一种方法是使用 NSNumberFormatter 来格式化您的结果,而不是使用 NSString 的-stringWithFormat:

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setMaximumFractionDigits:requiredDigits];
    [formatter setMinimumFractionDigits:0];
    NSString *result = [formatter stringFromNumber:[NSNumber numberWithFloat:currentNumber];
    

    【讨论】:

    • 无论何时需要将浮点数表示为不带尾随零的字符串。我的建议是在您的视图控制器中分配和配置格式化程序一次并将其存储在一个属性中,以便您可以根据需要使用它。然后,当您想要显示计算结果时,只需使用最后一行创建一个可以在标签中显示的字符串。
    • 完美,OT:你们是如何直接找到这些东西的?我的意思是,我有同样的问题。起初,苹果公司的人考虑实施它。然后你发现了。我想知道你是怎么找到的?
    • @jeet.chanchawat 20% 的经验,80% 的人知道当某件事看起来比它应有的困难时,通常有一种更简单的方法,或者几种更简单的方法。使用格式化程序可为您提供最大的控制权,但对于 OP 的规定要求 -stringValue-description 做正确的事情并且更简洁。当您处理像 NSNumber 这样的类时,每个 Mac 和 iOS 应用程序都在使用它,您可以猜测已经存在用于以您可能需要的各种方式显示数字的工具。
    【解决方案2】:

    最简单的方法就是使用 [[NSNumber numberWithFloat:] stringValue]

    例子:

    float someFloatValue;
    NSString floatWithoutZeroes = [[NSNumber numberWithFloat:someFloatValue] stringValue];
    

    【讨论】:

      【解决方案3】:

      如果我们使用%g 代替%f 将截断小数点后的所有零。

      例如

      [NSString stringWithFormat:@"%g", 1.201000];
      

      输出

      1.201
      

      【讨论】:

        【解决方案4】:

        这应该可以工作

        NSString *result = [@(currentNumber) description];
        

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。这是解决它的代码 sn-p(看起来很像 Caleb 的解决方案,但那个对我不起作用,所以我不得不添加一行):

          NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
          numberFormatter.numberStyle = kCFNumberFormatterDecimalStyle;
          numberFormatter.maximumFractionDigits = 20;
          numberFormatter.minimumFractionDigits = 0;
          
          NSNumber *number = [[NSNumber alloc]init];
          NSString *numberString = [numberFormatter stringFromNumber:number];
          

          我们可以使用另一个 numberStyle 并覆盖它的基本外观,设置所需的 NSNumberFormatter 属性。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-16
            相关资源
            最近更新 更多