iphone – 修正浮点数

iphone – 修正浮点数,第1张

概述我想知道是否有一种方法可以轻松安全地纠正浮点数. 例如, 输入时: “32 32.1” 结果: “64.0999999999999” 此外,我必须提到,使用科学记数法时,这种情况经常发生. “(2.3 * 10 ^ 23)*(1.452 * 10 ^ 23)” 返回: “3.339599999999999999e 46” 最后,有时返回的数字是: 恩. 123.0000000000001 谢谢您的 我想知道是否有一种方法可以轻松安全地纠正浮点数.

例如,

输入时:
“32 32.1”
结果:
“64.0999999999999”

此外,我必须提到,使用科学记数法时,这种情况经常发生.
“(2.3 * 10 ^ 23)*(1.452 * 10 ^ 23)”
返回:
“3.339599999999999999e 46”

最后,有时返回的数字是:
恩.
123.0000000000001

谢谢您的帮助!

编辑

得到批准的答案很棒.但我发现对我有用的是在Nsstring stringWithFormat中使用%g和double. %g似乎非常恰当地围绕一切.
恩.

answer.text = [Nsstring stringWithFormat@" %g ",doubleAnswer];

在计算中使用双打,然后使用该方法似乎对我有用,我希望这对其他人也有帮助.如果这不是您要找的答案,请查看已批准的答案!

解决方法 浮点数不能很好地代表具体数字.使用double会使这种情况发生的频率降低,但你仍然会遇到问题.有关如何存储浮点数的技术说明(以及为什么我们首先遇到此问题)请参阅此维基百科文章: IEEE 754-1985.(基本上,浮点数存储为值的二进制表示,并且只有很多位使用,所以它们很快耗尽,必须四舍五入到它们能够代表的最接近的值.)

通常,您不必担心/ – .0000001,只需要将它们显示为具有适当小数点数的用户并将其四舍五入.在内部,它的存储方式并不重要.

例如,如果要显示“结果”,可以执行以下 *** 作:

float myfloat = 32 + 32.1;Nsstring *result = [Nsstring stringWithFormat:%@"%.2f",myfloat];// result will contain 64.10

如果您不想要固定数量的小数点,您还可以使用NSNumber的浮点到字符串转换功能:

float myfloat = 32 + 32.1;NSNumber *myNumber = [NSNumber numberWithfloat:myfloat];Nsstring *result = [myNumber stringValue];// result will contain 64.1

NSDecimalNumber将为您处理所有这些,但它涉及更多,涉及更多的开销,但这是一个让您入门的示例:

NSDecimalNumber *num1   = [NSDecimalNumber decimalNumberWithString:@"32"];NSDecimalNumber *num2   = [NSDecimalNumber decimalNumberWithString:@"32.1"];// Or since you use exponents:  // NSDecimalNumber *num2   = [NSDecimalNumber decimalNumberWithMantissa:321 exponent:-1 isNegative:NO];NSDecimalNumber *myNumber = [num1 decimalNumberByAdding:num2];Nsstring *result = [myNumber stringValue];// result will contain 64.1
总结

以上是内存溢出为你收集整理的iphone – 修正浮点数全部内容,希望文章能够帮你解决iphone – 修正浮点数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1017387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存