当我在 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"));
除了在该操作中发生的double vs int之外,您将double视为精确定位。 当您真正关心准确性时,请尝试使用decimal数据类型。
更多信息请参见此答案: 十进制数 vs 双精度浮点数! - 我应该在什么情况下使用哪个?
双精度变量i = 200.0 / 3;
双精度变量i = ((double)200)/3;
发生的情况是两个整数进行整数除法,然后将整数答案分配给浮点数。为了避免这种情况,始终将其中一个数强制转换为双精度。
试试这个
i = 200d/3d;
它不会四舍五入。
200和3都是整数,因此结果也将是一个整数。将其中一个转换为十进制。
所有给出的答案都是错误的,因为它们将整数除法转换为一种双精度类型,从性能角度来看这显然不是所要求的。显而易见的答案是小学数学,乘以10,加上5再次除以整数。
i = (2000 / 3 + 5 ) / 10
你在这里捕捉到了第二个除法,这比进行双重转换要好得多,但仍然远非完美。你甚至可以通过乘以另一个因子并添加其他值,从而允许你使用右移而不是除以10。如何实现这一点的确切公式留给读者作为练习。(只需谷歌“带乘法位移的除法”)
祝您拥有愉快的一天。
double
结果,而不是截断为 int
。 - Mike Cowan
Convert.ToInt32(200 / 3.0)
所以我的小数转换成整数变成了67,但运行时会将我的数字转换为66? - Oxonhammer