在c#中表示double的正确方法是什么?

时间:2011-03-27 19:32:50

标签: c#

我正在使用第一种方式,而我的新公司正在使用第二种方式。

double x = 1.99; 

double y = 9.02D; 

哪一个是正确的,为什么?如果两者都是正确的,那么如何使用它是在不同的情况下?

7 个答案:

答案 0 :(得分:9)

来自msdn

  

默认情况下,真正的数字文字   作业的右侧   运算符被视为double。   但是,如果你想要一个整数   被视为双重,使用   后缀d或D,例如:复制

     

double x = 3D;

因此double x = 1.99;double y = 9.02D;

之间没有区别

答案 1 :(得分:6)

我想说你公司的做法可能更安全。值9.02后的D强制将整数数字(实际)值9.02视为double。

答案 2 :(得分:4)

没有后缀的浮点字面值是double,因此1.991.99D(或1.99d)之间没有区别 - 除了后一种形式明确表示这确实是double。所以这是一个风格问题,真的。一般来说,你当然应该坚持你公司的风格(除非你有一个非常令人信服的理由说这种风格是“错误的” - 在这种情况下你应该说服公司改变风格,而不是自己默默地违反它; - ))。

答案 3 :(得分:4)

对于一个简单的声明,它似乎无关紧要。

'd'后缀可能在以下情况下有用:

int n = 10;
double a = n / 3; // 3
double a = n / 3d; // 3.333..

但是无论如何它都是糟糕的形式,因为在进行分裂之前,第二个分裂取决于(n)的隐式转换为双重。

如果您将浮动常量传递给碰巧有两个重载的方法,则相同的推理:

void foo(float bar);
void foo(double bar);

您可以通过调用来区分要调用的版本:

X.foo(3.0D);

同样,不是最好的形式。

至于简单声明,没有速度优势,因为编译器无论如何都可能优化它。

(从here借来的例子)

答案 4 :(得分:3)

double y = 9.02D;,后缀D会将您的数字(实际)值转换为double。如果您希望将整数值转换为double或指定您的值确实为double,则使用此方法。

E.g。

double d = 3D;

Reference

PS。正如Sehe所提到的,这会将变量d转换为double。

var d = 3D;

没有D后缀,d可能是int

答案 5 :(得分:2)

从风格上讲,当你想要一个整数文字为双精度时,你通常只需要添加'd'或'D':

double d = 1d;

所以在你的例子中,创建double d = 1.99d是没有意义的,因为编译器已经将1.99分配给double。更何况当你宣布d时,它的类型也是双倍的。

一般情况下,您无需将dD添加到双重文字中。

然而,在你的情况下,第二个是正确的,因为它是由付钱给你的人选择的风格,最后,这才是真正重要的。

答案 6 :(得分:2)

后缀d很重要,同时使用反射和其他动态用法强制编译器将数字视为double而不是integer,其中double可以包含不带小数的数字。 1.99是完美的双倍。

使用1反射时会产生转换错误。

PropertyInfo p...

p.SetValue(obj, 1)

会抛出错误,但

p.SetValue(obj, 1D)

将正常工作。

var x = 1; 

x是int

var x = 1D;

x是双倍的。