如何在没有科学记数法或小数的情况下格式化数字

时间:2013-01-22 02:07:58

标签: iphone objective-c nsstring stringwithformat

我的目标是为iPhone创建一个客户计算器应用程序,并使用Xcode编写我的应用程序。我无法找到解决方案的问题是如何在不使用科学记数法或设定小数位数的情况下格式化数字。

我试过......

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

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

%f格式化始终在小数位后打印6位数,因此如果用户输入“5”,则显示5.000000。

%g格式化后跳转到6位数后的科学记数法,因此显示时1000000变为1e + 06。

我希望能够显示以下数字而没有无意义的小数或科学记数法:

123,456,789;
1.23456789;
12345.6789;
-123,456,789;
-1.23456789;
-12345.6789;

4 个答案:

答案 0 :(得分:2)

对于浮点数格式,您可以使用%f,并且必须指定最小字段宽度和字符方面的精度。如果使用%4.2f,则表示最小宽度为四个字符(如果使用少于4个字符,则左侧将填充空格),精度为2个字符。如果需要10个最小宽度字符和0个小数精度,则使用%10.0f。

在您的特定情况下,您应该使用%。0f表示没有小数精度的数字。

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

您可以找到快速参考here。不是Objective-c文档,而是等效文档。

为了完整起见,您可以找到NSString格式所遵循的规范文档:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/FormatStrings.html

在这里:

http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html

编辑截断:

buttonScreen.text = [NSString stringWithFormat:@"%d",(int)currentNumber];

但是,您应该阅读一些关于浮动表示,精确度和强制转换的内容,以了解可能出现的不良行为。

答案 1 :(得分:1)

看看NSNumberFormatter

配置正确,可以在适当时添加逗号。您还需要告诉它使用多少有效数字。

答案 2 :(得分:0)

你没有像你怀疑的那样与Xcode和Objective-c进行交互,底层实现是printf。查看this tutorial on how to use printf format specifiers

答案 3 :(得分:0)

那么你想要它看起来像什么? stringWithFormat格式是旧C sprintf的超集。那么您是否尝试过使用d和变体来满足您的喜好?