这个部门出了什么问题?

我认为有很多东西要学习数据类型。 为什么会这样

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

它给零..应该是37,5 …… 🙁

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

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

应该这样做。

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

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

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

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

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

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

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

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

最简单的解决方案如下:

 double result = (100.0 * 3/8) 

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

另外,toString()很奇怪??

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

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

所以,3/8 = 0。

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

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

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

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

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

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

使用:

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

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

3/8 = 0

3.0 / 8.0 = 0.375