3

我认为我有很多关于数据类型的知识。为什么会发生这种情况

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

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

4

11 回答 11

12

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

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

应该这样做。

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

于 2009-04-01T09:15:31.793 回答
6

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

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

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

于 2009-04-01T09:15:18.253 回答
4
double result = ((3.0/8.0)*100);

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

于 2009-04-01T09:15:32.057 回答
2

3 和 8 是整数,所以 3/8 = 0。

利用:

string result = ((3d/8d)*100d).ToString();
于 2009-04-01T09:15:59.437 回答
2

您的表达式仅涉及整数,并且 3/8 为 0。

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

最简单的解决方案如下:

double result = (100.0 * 3/8)

请注意,我将百个因子放在首位,因为它有助于在除法之前进行乘法运算的精度更高。

另外, toString() 很奇怪?

于 2009-04-01T09:17:24.440 回答
1

整数除法 (3/8) 产生 0。如果您想使用浮点值,请明确您的编程语言(3.0/8.0 或 3f/8f 或 3d/8d 或您的语言允许的任何其他内容)

于 2009-04-01T09:17:16.640 回答
1

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

所以,3/8 = 0。

于 2009-04-01T09:17:16.717 回答
1

独角兽把 3 拿走了,换成了 0。

如果这是一个真正的问题... 3/8 向下舍入为 0。0 * 100 = 0。

于 2009-04-01T09:17:18.823 回答
1

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

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

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

于 2009-04-01T09:18:46.403 回答
0

除法中的 3 和 8 是整数文字,因此会执行整数除法,并且 3 / 8 的计算结果为零。如果您将它们替换为 3.0 和 8.0,或者使用适当的数据类型后缀(您没有说明您使用的是哪种语言),那么计算将起作用。

于 2009-04-01T09:16:16.457 回答
0

3/8 = 0

3.0/8.0 = 0.375

于 2009-04-01T09:18:20.663 回答