数据类型字符声明(0.05D)为什么声明后D不冗余?

时间:2014-11-15 11:19:28

标签: vb.net constants

我参加了一个Visual Basic课程,并且在声明一个十进制的常量变量后,我被教导使用类型字符,如下所示:

const VARIABLE_NAME As Decimal = 0.06D

我最后添加D似乎是多余的,因为我已经声明了数据类型。我不敢问我的老师,因为我认为她可能无法在课前给我一个明确的答案。我之前在微处理器上上了一堂课,所以我对使用二进制文件将浮点数存储在内存中的方式进行了一些(很少)的讨论。任何人都可以给我一个明确的解释,以便我可以与其他同学分享吗?

1 个答案:

答案 0 :(得分:1)

为实体声明的数据类型(常量)不一定是用于初始化该实体的表达式的数据类型。您在=的左侧声明了类型,但它没有向右延伸。如果数据类型不匹配,则需要在分配时进行转换。

作为documented,文字表达的类型由其形状决定。默认情况下,属于数字,小数部分的文字被解释为Double

如果启用Option Strict On(您应该),则声明

Const VARIABLE_NAME As Decimal = 0.06

将失败并显示错误:

  

Option Strict On禁止从“Double”到“Decimal”的隐式转换。

这是因为没有从DoubleDecimal的隐式转换,因为Double数据类型可能包含Decimal无法表示的值。

为避免转化,您提供了一个首字母D的字体Decimal


将此与

进行比较
Const VARIABLE_NAME As Decimal = 42

左侧部分为Decimal,右侧部分为Integer,但即使Option Strict On也未发生编译错误,因为现在有Integer隐式扩展转换到Decimal,因为Decimal可以代表Integer可能拥有的所有值。