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转变的部门”)

祝你今天愉快。