2016-09-12 39 views
-2

在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?

+0

赤我的答案。 –

+1

您在编程语言中混淆了调试器。在你太失望之前,检查一下std :: setprecision实际上做了什么。而且,由于您正在查看调试器,您绝对不想改变您看到的内容,因为这只能隐藏错误。 – gnasher729

+0

[程序员应该知道什么关于浮点运算](http://floating-point-gui.de/) – Sulthan

回答

-1

PLZ使用

 double A = 0.0500000007; 
     NSString *b =[NSString stringWithFormat:@"$%.02f",A] ; 
    double B = [b doubleValue]; 
+0

请不要。如果您将数字放入标签中,请使用支持本地化的格式化程序。 – Sulthan

+0

@Sulthan他需要0.05的结果。这是什么错误。 –

+0

对于很多人来说,结果应该是'0,05'或其他适当的格式。使用'NSNumberFormatter'来格式化适合用户的语言环境的数字。 – rmaddy

0

您可以使用NSNumberFormatter以各种各样的方式来格式化对象---太多在这里列出,请参阅可从Xcode中的文档。另请参阅数据格式指南。

2

浮点数字是二进制浮点数字。 0.05不能完全由二进制浮点数表示。结果不可能精确到0.05。

此外,你是毫无意义地使用float而不是double。浮点数只有六位或七位精度。除非你有一个很好的理由可以解释,否则使用double,这会给你大约15个数字的精度。你仍然无法得到0.05,但错误会少得多。

0

您必须在%modulo运算符及其identifierf之间进行更改才能获得所需的结果。

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 
+0

不要使用'stringWithFormat'。使用'NSNumberFormatter',以便在用户的语言环境中正确格式化数字。 – rmaddy