在C#中使除法返回double的最佳做法是什么?

Ele*_*ent 5 c#

在c#中,如果要分割下面方法的结果,强制它返回double值而不是默认整数的最佳方法是什么.

(int)Math.Ceiling((double)(System.DateTime.DaysInMonth(2009, 1) / 7));
Run Code Online (Sandbox Code Playgroud)

如你所见,我需要除法返回一个双,所以我可以使用天花板功能.

Kon*_*lph 18

两个int数字的除法返回一个int,截断任何小数点.对于其他数据类型通常也是如此:算术运算不会改变其操作数的类型.

要强制执行某种返回类型,必须适当地转换操作数.在您的特定情况下,实际上将其中一个运算符转换为double:这样,C#将自动执行另一个操作数的转换.

您可以选择:您可以显式转换任一操作数.但是,由于第二个操作数是文字,因此最好直接使该文字成为正确的类型.

这可以使用类型后缀(d在情况下double)或在其后面写入小数点来完成.后一种方式通常是优选的.在你的情况下:

(int)Math.Ceiling(System.DateTime.DaysInMonth(2009, 1) / 7.0);
Run Code Online (Sandbox Code Playgroud)

请注意,此小数点表示法总是产生一个double.要制作一个float,你需要使用它的类型后缀:7f.

顺便提一下,几乎所有语言的基本运算符的这种行为都是相同的.一个值得注意的例外:VB,除法运算符通常产生一个Double.\如果不需要转换,则有一个特殊的整数除法运算符().另一个例外是C++以一种奇怪的方式:同一类型的两个指针之间的区别是a ptrdiff_t.这是有道理的,但它打破了运算符总是产生与其操作数相同类型的模式.特别是,减去2 unsigned int没有产生signed int.


cas*_*One 12

将7改为双:

(int) Math.Ceiling(System.DateTime.DaysInMonth(2009, 1) / 7.0);
Run Code Online (Sandbox Code Playgroud)