这个部门出了什么问题?

时间:2009-04-01 09:13:20

标签: c# double division

我认为我有很多东西要学习数据类型。 为什么会发生这种情况

double result = ((3/8)*100).ToString();

它给零..应该是37,5 ...... :(

11 个答案:

答案 0 :(得分:12)

3/8执行整数除法,结果为0

double result = ((3.0/8)*100);

应该这样做。

顺便说一下,如果你这样做((3.0 / 8)* 100).ToString()你得到一个字符串而不是一个双字符。

答案 1 :(得分:4)

您需要说服编译器执行浮点除法:

double result = (((double)3/8)*100);

否则它执行整数除法,然后3/8为零。

答案 2 :(得分:4)

double result = ((3.0/8.0)*100);

应该这样做。你正在执行整数除法,而不是浮点除法。

答案 3 :(得分:2)

你的表达式只涉及整数,而3/8是0。

如果需要浮点表达式,则表达式的至少一个元素必须是浮点数。

最简单的解决方案如下:

double result = (100.0 * 3/8)

请注意,我首先考虑了百分因子,因为它有助于在分割之前进行乘法运算具有更好的精度。

另外,toString()很奇怪??

答案 4 :(得分:1)

3和8是整数,因此3/8 = 0。

使用:

string result = ((3d/8d)*100d).ToString();

答案 5 :(得分:1)

整数除法(3/8)得到0.如果你想使用浮点值,那么要清楚你的编程语言(3.0 / 8.0或3f / 8f或3d / 8d或你的语言允许的其他内容)

答案 6 :(得分:1)

3& 8是整数,因此3/8的结果也是一个整数,除非你以不同的方式进行转换。

所以,3/8 = 0。

答案 7 :(得分:1)

独角兽拿走了3并取而代之的是0。

关于这是一个真实问题的概率...... 3/8向下舍入到0. 0 * 100 = 0.

答案 8 :(得分:1)

因为使用了整数数学,而不是浮点数。

您编写了((3/8)*100)但该表达式中没有常量具有非整数类型。因此编译器(正确地)将其解释为整数运算。由于3/8小于1,表达式的计算结果为0。

一个简单的解决方法是改为编写((3./8.)*100.)。实际上,由于混合类型表达式的规则,使3或8中的任何一个成为浮点值就足够了。

答案 9 :(得分:0)

你的除法中的<3>和8是整数文字,因此执行整数除法,并且3/8的计算结果为零。如果用3.0和8.0替换它们,或使用适当的数据类型后缀(你没有说出你所使用的语言),那么计算就可以了。

答案 10 :(得分:0)

3/8 = 0

3.0 / 8.0 = 0.375