3

我的目标是为 iPhone 创建一个客户计算器应用程序,我正在使用 Xcode 编写我的应用程序。我找不到解决方案的问题是如何格式化使用小数(带有额外零)的数字而不转换为科学记数法

我试过...

buttonScreen.text = [NSString stringWithFormat:@"%0.f",currentNumber];

%0.f格式总是四舍五入,所以如果用户输入“4.23”,它会显示“4”

%f格式化带有 6 位小数的数字(输入“5”显示为“5.000000”),但我不想在数字末尾显示额外的零。

%10.4f是我在阅读中看到的其他解决方案,但我的问题是我不知道答案中有多少个小数,我可能想要零个小数或 10 个小数,具体取决于数字。

以下是我想显示的数字示例(不带逗号):大于 6 位的整数,大于 6 位的十进制数。

123,456,789;
0.123456789;
12345.6789;
-123,456,789;
-0.23456789;
-12345.6789;

*这是对我之前的问题“如何在没有科学记数法或小数的情况下格式化数字”的精神转贴,我打算写“不必要(额外的零)”时措辞不佳,但在重读我的帖子后,我清楚地看到我无法传达这一点在我的问题的任何时候。

4

3 回答 3

10

使用NSNumberFormatter 类

首先定义格式化程序:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

然后您可以定义格式化程序的各种属性:

formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.maximumIntigerDigits = 3;
formatter.minimumFractionDigits = 3;
formatter.maximumFractionDigits = 8;
formatter.usesSignificantDigits = NO;
formatter.usesGroupingSeparator = YES;
formatter.groupingSeparator = @",";
formatter.decimalSeparator = @".";
....

您将数字格式化为这样的字符串:

NSString *formattedNumber = [formatter stringFromNumber:num];

玩弄它。它非常简单,但可能需要一些工作才能获得您想要的外观。

于 2013-01-23T15:33:58.697 回答
3

实际上,使用它更有意义:

label.text = [NSString stringWithFormat:@"%.4f", answer];

这告诉 XCode 以 4 位小数显示您的数字,但它不会尝试用空格“填充”数字的前面。例如:

1.23 ->  "    1.2300"   //  When using [NSString stringWithFormat:@"%9.4f", answer];
1.23 ->  "1.2300"       //  When using [NSString stringWithFormat:@"%.4f", answer];
于 2014-12-01T10:50:38.747 回答
1

尝试这样的事情

label.text = [NSString stringWithFormat:@"%9.4f", answer];

其中 9 表示总位数(就对齐填充而言),4 表示 4 位小数。

于 2013-01-23T15:29:01.360 回答