ono*_*nof 35 .net c# double decimal
public class MyClass
{
public const Decimal CONSTANT = 0.50; // ERROR CS0664
}
Run Code Online (Sandbox Code Playgroud)
产生此错误:
错误CS0664:double类型的文字不能隐式转换为'decimal'类型; 使用'M'后缀来创建此类型的文字
作为记录.但这有效:
public class MyClass
{
public const Decimal CONSTANT = 50; // OK
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么他们禁止第一个.这对我来说似乎很奇怪.
Jon*_*eet 47
该类型文字的没有的m后缀是double-它就是这么简单.您无法以float这种方式初始化:
float x = 10.0; // Fail
Run Code Online (Sandbox Code Playgroud)
该类型的文字的,应明确从字面本身,变量的类型会被分配给应分配给从那个字面的类型.所以你的第二个例子是有效的,因为有一个从int(文字的类型)到的隐式转换decimal.有没有从隐式转换double到decimal(因为它可能会丢失信息).
就个人而言,如果没有违约或默认情况decimal,我会更喜欢它,但这是另一回事......
您在同一个链接中的答案有点低,也在这里.在转化中:
"积分类型隐式转换为十进制,结果计算为十进制.因此,您可以使用整数文字初始化十进制变量,不带后缀".
所以,原因是因为int和decimal之间的隐式转换.并且由于0.50被视为double,并且在double和decimal之间没有隐式转换,因此会出现错误.
更多细节:
http://msdn.microsoft.com/en-us/library/y5b434w4(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/yht2cx7b.aspx
| 归档时间: |
|
| 查看次数: |
26995 次 |
| 最近记录: |