可可 Objective-C中的浮动问题

更新时间:2024-04-24 下载TXT文档 下载Word文档

我有一个小问题,我找不到解决方案!

我的代码是(这只是一个示例代码,但是我的原始代码做了这样的事情):

float x = [@"2.45" floatValue];


for(int i=0; i<100; i++)
    x += 0.22;

NSLog(@"%f", x);

输出是52.450001而不是52.450000!

我不知道,因为这会发生!

谢谢你的帮助!

饩? 短码网-DuanMa.NET

>

>
谢谢大家! 是的,我已经解决了双重类型!

>

  • hannos链接解释了问题。 这个特殊的例子不会出现使用double而不是float的情况,但是存在相同的基本缺陷。
  • 不过,Double会打破其他数字。 尝试十进制。

浮点数是具有一定精度的数字表示形式。并非每个值都可以用这种格式表示。也请参见这里。

您可以轻松想到为什么会这样:仅在间隔(1..1)中有无限数量的数字,但是浮点数仅具有有限的位数来表示(-MAXFLOAT .. MAXFLOAT)。

更恰当地说:在32位整数表示中,要表示的整数个数是可数的,但是有无限数量的实数值,不能在32位或64位的有限表示中完全表示。因此,不仅最高和最低可表示的实际值受到限制,而且准确性也受到限制。

那么,为什么浮点数后的数字很少会受到影响?因为表示形式是基于二进制而不是十进制,所以使其他数字比十进制数字更容易表示。

以上就是短码网小编为大家整理的《可可 Objective-C中的浮动问题》相关内容,希望大家喜欢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若内容造成侵权/违法违规/事实不符,请将联系本站反馈,一经查实,立即处理!

可可 Objective-C中的浮动问题》文档下载仅供参考学习,下载后请在24小时内删除。

转载注明出处:https://www.duanma.net/article/5b5928d8998.html

回到顶部