C#本身正在四舍五入
当我在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
您可以指定具有所需小数点的格式string:
double i; i = 200 / 3.0; Messagebox.Show(i.ToString("F6"));
200 / 3
这是一个整数除法。 更改为: 200.0 / 3
,使其成为浮点部分。
虽然答案实际上是66.666,但是正在计算200/3的结果是一个整数。 整数然后被放置在浮动。 math本身就是整数运算。 为了使它成为一个浮点数,使用200.0 / 3 .0将使它把200当作一个浮点数,从而产生浮点math。
除了在这个动作中发生的双重对比,你认为双精度单位。 如果您真的关心准确性,请尝试使用十进制数据types。
在这个答案更多的信息: 十进制与双重! – 我应该使用哪一个?
双倍i = 200.0 / 3;
双i =((双)200)/ 3;
会发生什么是两个整数执行整数除法,然后将整数答案分配给浮点数。 为了避免这种情况,请始终将其中一个数字作为双精度。
尝试这个
i = 200d/3d;
它不会圆。
200和3都是整数,所以结果将是一个整数。 将其中一个转换为小数。
所有给出的答案都是错误的,因为它们将整数分解翻译成一种双重的,这完全不是所要求的(至less从性能的angular度来看)。 明显的答案是小学math,乘以10,再加5除,全部整数。
i =(2000/3 + 5)/ 10
你在这里抓到了第二个分区,这比做双转换还要好,但还不够完美。 你可以走得更远,再乘以另一个因子,并加上其他的数值,这样你就可以使用右移而不是将其除以10.这样做的确切公式只是给读者一个练习。 (只是谷歌“与Multiply转变的部门”)
祝你今天愉快。