Decimal数据类型的准确性是多少



我找不到任何地方表明VBA有一个特殊的数字e变量,所以我认为大量的小数位数就足够了。手册说明如下:

您可以使用Decimal变量作为货币值。优点是数值的精确性。Double数据类型速度更快,所需内存更少,但会出现舍入错误。Decimal数据类型保留了小数点后28位的完整精度。

https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/numeric-data-types

我试过做Dim e@("@"是手册中的十进制标识符(,以及这种格式的

Dim MyDecimal As Variant
MyDecimal = CDec(3000000000000) 

来自https://bettersolutions.com/vba/data-types/decimal-data-type.htm

但是,当我尝试用值2.7182818284590452353602874713初始化e时,它会四舍五入为2.71828182845905。这是怎么回事?小数点后28位实际不能使用吗?

这里发生了什么?小数点后28位实际不能使用吗?

这是因为,当您这样做时,该值会被读取为Double,从而在CDec转换之前被截断为该数据类型可以容纳的值。

? CDec(2.7182818284590452353602874713)
2.71828182845904 
? CDec(CDbl("2.7182818284590452353602874713"))
2.71828182845904 
? CDec("2.7182818284590452353602874713")
2.7182818284590452353602874713 

最新更新