在 VB 中将十进制转换为长整数
converting decimal to long in VB
所以当我尝试 运行 这段代码时,为什么我打印了 2。是每个 Decimal 都转换为 long 然后求和(1 + 1 即 2),还是先对整个 Decimal 求和然后四舍五入(2.5 应该是 3)。奇怪的是,当我将 x 的值更改为 1.26 时,打印的值是 3。2.51 当然应该四舍五入到 3,但是按照这个逻辑,2.5 不应该也四舍五入吗?
Module VBModule
Sub Main()
Dim x As Decimal = 1.25
Dim y As Decimal = 1.25
Dim z As Long = (x+y)
Console.WriteLine(z)
End Sub
End Module
谢谢!
您假设以 0.5 结尾的分数将向上舍入是不正确的。它们四舍五入到最接近的 even 整数(因此 2.5 舍入为 2,但 3.5 舍入为 4)。这被称为 Bankers Rounding. You can force 0.5 to be rounded up by using the MidpointRounding option with Math.Round。请注意,在 Decimal
上使用 Math.Round
类型 returns a 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)
运行 下面作为测试。 z 出来的是 3,J 出来的是 2。所以 Dim z As Long = CLng(x + y)
好像是把两者加在一起再转换。而如果你单独转换它们并添加它们,你会得到不同的结果
Option Strict On
Module Module1
Sub Main()
Dim x As Decimal = CDec(1.26)
Dim y As Decimal = CDec(1.25)
Dim z As Long = CLng(x + y)
Dim F As Long = CLng(x)
Dim G As Long = CLng(y)
Dim J As Long = F + G
Console.WriteLine(z)
Console.WriteLine(J)
Console.ReadLine()
End Sub
End Module
所以当我尝试 运行 这段代码时,为什么我打印了 2。是每个 Decimal 都转换为 long 然后求和(1 + 1 即 2),还是先对整个 Decimal 求和然后四舍五入(2.5 应该是 3)。奇怪的是,当我将 x 的值更改为 1.26 时,打印的值是 3。2.51 当然应该四舍五入到 3,但是按照这个逻辑,2.5 不应该也四舍五入吗?
Module VBModule
Sub Main()
Dim x As Decimal = 1.25
Dim y As Decimal = 1.25
Dim z As Long = (x+y)
Console.WriteLine(z)
End Sub
End Module
谢谢!
您假设以 0.5 结尾的分数将向上舍入是不正确的。它们四舍五入到最接近的 even 整数(因此 2.5 舍入为 2,但 3.5 舍入为 4)。这被称为 Bankers Rounding. You can force 0.5 to be rounded up by using the MidpointRounding option with Math.Round。请注意,在 Decimal
上使用 Math.Round
类型 returns a 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)
运行 下面作为测试。 z 出来的是 3,J 出来的是 2。所以 Dim z As Long = CLng(x + y)
好像是把两者加在一起再转换。而如果你单独转换它们并添加它们,你会得到不同的结果
Option Strict On
Module Module1
Sub Main()
Dim x As Decimal = CDec(1.26)
Dim y As Decimal = CDec(1.25)
Dim z As Long = CLng(x + y)
Dim F As Long = CLng(x)
Dim G As Long = CLng(y)
Dim J As Long = F + G
Console.WriteLine(z)
Console.WriteLine(J)
Console.ReadLine()
End Sub
End Module