gpt4 book ai didi

.net - 在 Visual Basic 中转换为整数时如何确定舍入方向

转载 作者:行者123 更新时间:2023-12-01 06:20:26 25 4
gpt4 key购买 nike

我正在尝试在 python 中重现一些 Visual Basic 代码。我有一个生成分数( double )并将其转换为整数的函数,如下所示:

Dim random_int As Integer
Dim rounded_int As Integer
random_int = CInt(Math.Ceiling(Rnd() * n)) + 1
rounded_int = CInt(random_int/2)

CInt() 将 double 值四舍五入为最接近的整数。然而,当该值为 0.5 时,这似乎是随机的;有时涨,有时跌。这使得代码难以测试。在 python(2.7) 中,数字始终按相同方向四舍五入。

我可以在结果中加上或减去一个小数字(例如 0.1),但不应更改原始代码。

这种行为是否正常或者我可以通过某种方式控制它吗?

最佳答案

CInt在 VBA 中使用 Banker's Rounding ,也称为“四舍五入”。这解释了“随机”行为。一些例子是:

2.5 -> 2
3.5 -> 4

您不能使用 CInt 自定义行为。从历史上看,舍入方法的实现在 Microsoft 的各种技术中是不一致的,this KB article说明了这一点并提供了各种其他常见舍入形式的代码示例。

另一项补充:由于浮点技术限制,1.5 可能在内部表示为 1.4999999,从而造成进一步的困惑。 This article试图解释为什么会发生这种情况以及如何解决。

编辑:由于 vba 标记,我假设 Visual Basic for Applications,如果您使用的是 Visual Basic .NET,则可以调用 Math.RoundMidpointRounding过载。

关于.net - 在 Visual Basic 中转换为整数时如何确定舍入方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412623/

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