gpt4 book ai didi

ios - objective c float 增量错误值

转载 作者:行者123 更新时间:2023-11-28 18:03:24 25 4
gpt4 key购买 nike

我有一个关于循环中 float 值增量的查询。

我有以下代码

float add = 1.02f;
float counter = 0.0f;
for (int i = 0; i < 20; i++) {
counter += add;
NSLog(@"%f",counter);
}

在执行这个循环时我得到以下结果

1.020000
2.040000
3.060000
4.080000
5.100000
6.120000
7.140000
8.160000
9.180000
10.200001
11.220001
12.240002
13.260002
14.280003
15.300003
16.320004
17.340004
18.360004
19.380005
20.400005

这是预期的结果

1.020000
2.040000
3.060000
4.080000
5.100000
6.120000
7.140000
8.160000
9.180000
10.200000
11.220000
12.240000
13.260000
14.280000
15.300000
16.320000
17.340000
18.360000
19.380000
20.400000

为什么我在循环中得到一些 float 而不添加它。

我需要循环 1000 次以上。我想要 float 变量中的值。

提前致谢。

最佳答案

发生这种情况是因为 float 无法精确表示您拥有的值。有两种简单的方法可以解决此问题:

  • 将数字表示为目标值的 100 倍,并使用整数 - 1.02 变为 102, 2.04变为 204,依此类推。
  • 使用 NSDecimalNumber 来表示您的数字 - 与 float 不同,NSDecimalNumber 可以完全精确地表示您的所有值.

这是第一种方法的实现方式:

int add = 102;
int counter = 0;
for (int i = 0; i < 20; i++) {
counter += add;
NSLog(@"%d.%d", counter/100, counter%100);
}

下面是实现第二种方法的方法:

NSDecimalNumber add = [NSDecimalNumber decimalNumberWithString:@"1.02"];
NSDecimalNumber counter = [NSDecimalNumber zero];
for (int i = 0; i < 20; i++) {
counter = [counter decimalNumberByAdding:add];
NSLog(@"%@", counter);
}

关于ios - objective c float 增量错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com