C#正在自行取整

C# is rounding down divisions by itself

当我在C做一个除法时,它会自动向下舍入。请参见以下示例:

1
2
3
double i;
i = 200 / 3;
Messagebox.Show(i.ToString());

这显示了一个包含"66"的消息框。200/3实际上是66.66666~然而。

有没有一种方法可以避免这种取整,并保留66.6666667这样的数字?


i = 200 / 3正在执行整数除法。

尝试:

i = (double)200 / 3

i = 200.0 / 3

i = 200d / 3

将其中一个常量声明为double将导致使用double除法运算符。


200/3是整数除法,产生一个整数。

尝试200 / 3


可以使用所需的小数位数指定格式字符串:

1
2
3
double i;
i = 200 / 3.0;
Messagebox.Show(i.ToString("F6"));

这是一个整数除法。改为:200.0 / 3使其成为浮点除法。


除了在那个动作中发生的double和int,你认为double是一个精确的单位。当您真正关心准确性时,请尝试使用decimal数据类型。

有关此答案的详细信息:十进制与双精度!-我应该用哪一个?什么时候用?


虽然答案实际上是66.666,但实际情况是,200/3的计算结果是一个整数。然后将整数放入浮点中。数学本身是以整数数学的形式发生的。要使其成为浮点数,请使用200.0/3。.0将使它将200视为浮点,从而产生浮点数学。


双i=200.0/3;

双I=(双)200)/3;

所发生的是两个整数执行整数除,然后将整数答案分配给浮点。要避免这种情况,请始终将其中一个数字强制转换为双精度数。


试试这个

1
i = 200d/3d;

它不会转。


200和3都是整数,所以结果将是一个整数。将其中一个转换为十进制。


所有给定的答案都是错误的,因为它们将整数除法转换为一种类型的双精度除法,这完全不是所要求的(至少从性能角度而言)。显而易见的答案是小学数学,乘以10,加5再除以,都是整数。

I=(2000/3+5)/10

你在这里得到了第二个除法,这比做两次转换要好,但还远远不够完美。你可以更进一步,乘以另一个因子,再加上5以外的其他值,这样你就可以使用右移而不是除以10。这样做的确切公式留给读者作为练习。(只需google"带乘法移位的除法")。

祝您有个美好的一天。