gpt4 book ai didi

VBA 双舍入与单舍入

转载 作者:行者123 更新时间:2023-12-02 10:31:03 25 4
gpt4 key购买 nike

在我的 MS Excel 中,对于不同的数据类型,我有不同的舍入操作行为:

如果是单例:

? Application.Round(6.575!, 2)
6.57

如果是双倍:

? Application.Round(6.575#, 2)
6.58

有人知道为什么吗?

<小时/>

更新:@paxdiablo给出了一个很好的答案,所以只是在这里简单地重现它:

在单精度中,6.575 的二进制表示形式为 0 10000001 101001 0011 0011 0011 0011,即 6.57499980926513671875。四舍五入为 6.57

在 double 中,添加了更多 0011,它们的权重足以使数字略大于 6.575 (6.57500000000000017763568394003),因此四舍五入为 6.58

最佳答案

可能因为浮点精度的限制不同。当您使用 6.575 这样的值时,计算机会选择最接近的近似值。对于单个,这可能是:

6.574999993

将向下舍入。对于 double ,可能是:

6.57500000000001

将向上舍入。

<小时/>

澄清一下,6.575 的 IEE754 单精度位值为:

s eeeeeeee ffffff ffff ffff ffff ffff f
0 10000001 101001 0011 0011 0011 0011 0

(末尾重复的 0011 通常是无限重复值的符号,无法完全表示)。

double 也非常相似,它有以下位:

s eeeeeeeeeee ffffff ffff ffff ffff ffff ...
0 10000000001 101001 0011 0011 0011 0011 ...

其中也有重复序列(见下文)。

enter image description here它无法准确表示的原因是,您只能通过在允许的位数内对 2 的幂(例如 4、2、1/16 等)求和来构造该数字。

通常,您不能总是相信打印出来的内容,因为打印例程了解有限的精度并进行调整。因此,您几乎肯定会得到 6.575,因为这是最接近给定位模式的十进制值,但位模式本身将用于计算。

关于VBA 双舍入与单舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18504637/

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