C#本身就是在四舍五入除法

本文关键字:四舍五入 除法 | 更新日期: 2023-09-27 17:58:57

当我在C#中进行除法时,它会自动向下取整。参见此示例:

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

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

有没有一种方法可以避免这种四舍五入并保持66.6666667这样的数字?

C#本身就是在四舍五入除法

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

尝试其中一种:

i = (double)200 / 3

i = 200.0 / 3

i = 200d / 3

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

200/3是整数除法,得到一个整数。

尝试200.0/3.0

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

您可以指定具有所需小数位数的格式字符串:

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

虽然答案实际上是66.666,但实际情况是计算出了200/3,得到了一个整数。然后将整数放入浮点值中。数学本身就是整数数学。要使其成为浮子,请使用200.0/3。.0将导致它将200视为浮点运算,从而产生浮点运算。

除了在该操作中发生的double与int之外,您认为double是一个精确的单元。当您真正关心准确性时,请尝试使用十进制数据类型。

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

双i=200.0/3;

二重i=((二重)200)/3;

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

试试这个

i = 200d/3d;

而且它不会变圆。

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

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

i=(2000/3+5)/10

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

祝你今天愉快。