在C++中,有一个std :: setprecision函数可以设置float/double精度。我如何在Objective-C中设置精度?和这张照片如下:如何在Objective-C中设置精度
(lldb) p 10/200
(int) $0 = 0
(lldb) p (float)10/200
(float) $1 = 0.0500000007
第3行结果是0.0500000007,结果为什么是'7'?我怎么能得到的结果是0.05?
在C++中,有一个std :: setprecision函数可以设置float/double精度。我如何在Objective-C中设置精度?和这张照片如下:如何在Objective-C中设置精度
(lldb) p 10/200
(int) $0 = 0
(lldb) p (float)10/200
(float) $1 = 0.0500000007
第3行结果是0.0500000007,结果为什么是'7'?我怎么能得到的结果是0.05?
您可以使用NSNumberFormatter以各种各样的方式来格式化对象---太多在这里列出,请参阅可从Xcode中的文档。另请参阅数据格式指南。
浮点数字是二进制浮点数字。 0.05不能完全由二进制浮点数表示。结果不可能精确到0.05。
此外,你是毫无意义地使用float而不是double。浮点数只有六位或七位精度。除非你有一个很好的理由可以解释,否则使用double,这会给你大约15个数字的精度。你仍然无法得到0.05,但错误会少得多。
您必须在%
modulo
运算符及其identifier
f
之间进行更改才能获得所需的结果。
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f告诉你将被格式化浮动(%f)和,应四舍五入到两个地方,而应该用0来填充格式。
例子:
%f = 25.000000 // results 25.000000
%.f = 25 // results 25
%.02f = 25.00 // results 25.00
不要使用'stringWithFormat'。使用'NSNumberFormatter',以便在用户的语言环境中正确格式化数字。 – rmaddy
赤我的答案。 –
您在编程语言中混淆了调试器。在你太失望之前,检查一下std :: setprecision实际上做了什么。而且,由于您正在查看调试器,您绝对不想改变您看到的内容,因为这只能隐藏错误。 – gnasher729
[程序员应该知道什么关于浮点运算](http://floating-point-gui.de/) – Sulthan