在VB中将十进制转换为long

时间:2016-08-23 14:24:38

标签: vb.net decimal long-integer

因此,当我尝试运行这段代码时,为什么我会打印2。每个Decimal是否转换为long然后求和(1 + 1为2)或者是整个Decimal首先求和然后舍入(2.5应该是3)。奇怪的是,当我将x的值更改为1.26时,打印的值为3.当然,2.51应该舍入到3,但是根据该逻辑,不应该2.5也会向上舍入?

MbusTcpSlaveProtocol.hpp

谢谢!

2 个答案:

答案 0 :(得分:2)

您假设以0.5结尾的分数将被舍入不正确。它们四舍五入到最接近的偶数整数(因此2.5轮到2轮,但3.5轮到4轮)。这称为Bankers Rounding。您可以使用MidpointRounding Math.Round选项强制0.5向上舍入。请注意,在Math.Round类型上使用Decimal会返回Decimal,因此您仍需将其转换为Long

以下代码将使用Option Strict On进行编译,并在控制台上显示“3”。

Dim x As Decimal = 1.25D
Dim y As Decimal = 1.25D
Dim z As Long = CLng(Math.Round(x + y, 0, MidpointRounding.AwayFromZero))
Console.WriteLine(z)

答案 1 :(得分:1)

将以下内容作为测试。 z出来3,J出来2.所以public void verifyPassword(String password, Person person) { if (isBusinessClient(person)) { // Apply strict wiring PasswordChecker checker = new PasswordChecker(); passwordChecker.check(password) } else if (wasBusinessClient(person)) { // Apply normal wiring PasswordChecker checker = new PasswordChecker(); passwordChecker.check(password) } else { // Apply lax wiring PasswordChecker checker = new PasswordChecker(); passwordChecker.check(password) } } 似乎已将两者加在一起然后转换。而如果你单独转换它们并添加它们就会得到不同的结果

Dim z As Long = CLng(x + y)