为对象分配十进制值会导致精度损失

时间:2015-06-30 08:39:39

标签: vb.net casting

我有一个值123456789012345.89,我将其分配给对象类型变量。默认情况下,它被指定为双重对象和丢失精度(123456789012346),因为对于double类型,值太大。有没有办法可以将对象中的值作为十进制而不是双倍?

Dim obj As Object = 123456789012345.89
Dim deci As Decimal = obj
Console.WriteLine(deci)
Console.WriteLine(obj.ToString())

1 个答案:

答案 0 :(得分:2)

使用123456789012345.89D代替123456789012345.89分配正确的类型:

Dim obj As Object = 123456789012345.89D ' now it's a Decimal
Dim deci As Decimal = DirectCast(obj, Decimal)
Console.WriteLine(deci)

我还强烈建议您将Option Strict设置为On。然后,您必须使用DirectCast(或CType)将对象强制转换为十进制。但是你获得了编译时的安全性。

MSDN: Constant and Literal Data Types