我参加了一个Visual Basic课程,并且在声明一个十进制的常量变量后,我被教导使用类型字符,如下所示:
const VARIABLE_NAME As Decimal = 0.06D
我最后添加D
似乎是多余的,因为我已经声明了数据类型。我不敢问我的老师,因为我认为她可能无法在课前给我一个明确的答案。我之前在微处理器上上了一堂课,所以我对使用二进制文件将浮点数存储在内存中的方式进行了一些(很少)的讨论。任何人都可以给我一个明确的解释,以便我可以与其他同学分享吗?
答案 0 :(得分:1)
为实体声明的数据类型(常量)不一定是用于初始化该实体的表达式的数据类型。您在=
的左侧声明了类型,但它没有向右延伸。如果数据类型不匹配,则需要在分配时进行转换。
作为documented,文字表达的类型由其形状决定。默认情况下,属于数字,小数部分的文字被解释为Double
。
如果启用Option Strict On
(您应该),则声明
Const VARIABLE_NAME As Decimal = 0.06
将失败并显示错误:
Option Strict On禁止从“Double”到“Decimal”的隐式转换。
这是因为没有从Double
到Decimal
的隐式转换,因为Double
数据类型可能包含Decimal
无法表示的值。
为避免转化,您提供了一个首字母D
的字体Decimal
。
将此与
进行比较Const VARIABLE_NAME As Decimal = 42
左侧部分为Decimal
,右侧部分为Integer
,但即使Option Strict On
也未发生编译错误,因为现在有Integer
隐式扩展转换到Decimal
,因为Decimal
可以代表Integer
可能拥有的所有值。