C#本身就是在四舍五入除法
本文关键字:四舍五入 除法 | 更新日期: 2023-09-27 17:58:57
当我在C#中进行除法时,它会自动向下取整。参见此示例:
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将导致使用双除法运算符。
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。做这件事的确切公式留给读者练习。(只需谷歌"乘法移位除法")
祝你今天愉快。