要声明浮点数,我们需要为浮点数设置’f’,为双打设置’d’.
例:
float num1 = 1.23f; // float stored as float float num2 = 1.23; // double stored as float. The code won't compile in C#.
据说如果省略浮点文字,C#默认为double.
我的问题是,是什么阻止了像’C#’这样的现代语言对左侧变量类型的’DEFAULTS’?毕竟,编译器可以看到整行代码.
这是出于编译器设计的历史原因吗?或者有什么我没有得到的.
解决方法
这里的其他人可能可以解释为什么.NET开发人员决定不使用某种预测来确定如何将数字文字加入到你提供给它的类型中.但在没有任何哲学的情况下,答案很简单:他们不想这样做,所以他们没有.我不会告诉你,你完全不应该关心这一点,因为当然要让编译器准确理解你想要的东西并不是完全没有道理的.它至少是好的,对吗?
(但是,如果我不得不猜测,我会说它与允许某种逻辑隐式类型有很多关系 – 浮点数f = 1.0是浮点数,但是var d = 1.0是双倍的吗?当你得到它时,这就更不合乎逻辑了考虑到f.Equals(d)是假的,尽管事实上1.0 == 1.0是真的.)
但是,假设他们有充分的理由不引入任何类型定义特定的预测(并且在Rotem的帖子中可以找到一些更完美的理由),我可以想象他们认为双倍num1 = 1.23是可接受的最好的理由,并浮动num1 = 1.23不是,在大多数情况下,双重坦率地说更有用.在大多数用例中,使用64位浮点值而不是32位的cpu和IO惩罚可以忽略不计,但是不必担心超出该数据类型的界限是有用的.
请注意,您可以创建完全相同的参数,说明为什么1.23不能分配给没有后缀的小数.设计C#的人决定更容易对任何给定格式的数字文字的类型做出假设,而double是一个完全合理的假设,因为大多数写1.23的人想要一个双重,或者至少应该使用一.