创建一个有默认值的数组,但是默认值被改变了

Creating an Array with a Default Value,But the default value is changed

我创建一个数组,设置默认值为0.3,根据0.29999999999999999,为什么会这样?

这是因为浮点值的二进制表示。一些浮点值不能在给定的内存中精确表示 space,因此将它们四舍五入为适合的值。查看此 post 了解有关 this 的更多详细信息。如果您想避免这种情况,大多数编程语言都有一种使用以 10 为基数的算术的数据类型,并且没有此限制。对于 swift 即 NSDecimalNumber,但请注意通常这种数据类型要慢得多。

其实很简单。当您有一个以 10 为底的系统(如我们的系统)时,它只能表示使用基数的质因数的分数。 10的质因数是2和5,所以1/2、1/4、1/5、1/8、1/10都可以表达的很干净,因为分母都用了10的质因数。相比之下,1 /3、1/6 和 1/7 都是循环小数,因为它们的分母使用质因数 3 或 7。在二进制(或基数 2)中,唯一的质因数是 2。所以你只能干净地表达分数只包含 2 作为质因数。在二进制中,1/2、1/4、1/8 都可以清晰地表示为小数。而 1/5 或 1/10 将是重复小数。所以 0.1 和 0.2(1/10 和 1/5)虽然在以 10 为基数的系统中是干净的小数,但在计算机运行的以 2 为基数的系统中是重复的小数。当你对这些重复的小数进行数学计算时,你最终会得到剩菜当您将计算机的基数 2(二进制)数转换为更易读的基数 10 数时,它会继续存在。

详情:

http://0.30000000000000004.com/