当编译器看到数字文字,它选择根据数字,标点符号和后缀(如果有的话)的大小的类型,然后在转换它到该类型的字符的序列;所有这些都是在不考虑编译器将如何处理数字的情况下完成的。一旦完成,编译器将只允许将该数字用作其自己的类型,明确地将其转换为另一种类型,或者在下面定义的两种情况下隐式转换为另一种类型。
如果号码被解释为任何整数类型(int
,long
等),编译器将允许它被用来初始化,其中数可表示任何整数类型,以及任何二进制或十进制浮点而不考虑数字是否可以在该类型中精确表示。
如果号码键入Single
[由f
后缀表示],编译器将允许它被用来初始化一个Double
,而不对所得Double
是否准确地表示与该Single
初始化的字面方面。
Double
类型的数字文本[包括一个小数点,但没有后缀]或Decimal
[一个“d”为后缀不是通过加上或减去接着立即]不能用于初始化任何其它的变量,即使该数字可以在目标类型中精确表示,或者结果将成为目标类型对所涉及的数字文字的最佳表示。
注意Decimal
类型和其他浮点类型(double
和float
)之间转换,应尽可能避免,因为转换的方法不是非常精确。虽然有许多对于没有确切Decimal
表示存在double
值,有一个宽数值范围,其中Decimal
值更紧密包装的比double
值。人们可能会预期,转换double
会选择最接近的Decimal
值或至少一个Decimal
值,该值介于该值与下一个更高或更低的double
值之间,但常规转换方法并不总是如此。在某些情况下,结果可以通过显著保证金被关闭。
如果您发现自己必须将Double
转换为Decimal
,那么您可能是在做错某些事情。虽然有一些操作可在Double
不可用的Decimal
,这两种类型之间进行转换的行为意味着什么Decimal
结果你最终趋于变比,如果所有的计算都在Double`已经做不太精确。
好吧!谢谢你的澄清。 – user1691432 2013-05-02 22:16:31
这已经回答了你的问题?如果是这样标记出。谢谢 – Guanxi 2013-05-04 13:03:38