C中的双值错误

时间:2017-06-04 17:22:26

标签: c double

我对这个简单的代码有点问题。

我尝试过不同类型的铸件,但我在这里没有任何问题。如果有人告诉我为什么它总是打印0.0000000或类似的东西,我会很遗憾并提前感谢。

#include<stdio.h>
main()
{
    double num1,num5;
    printf ("Hello user\n");
    printf ("Let the thickness of black and white brick are same and the value 
             is 2m\nAnd the gap between them is 1m\n");
    printf ("\nEnter the length of the road:\n");
    scanf ("%lf",&num1);
    num5 = ((2/5)*num1);
    printf ("%lf",num5);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

(2/5)执行整数计算,结果为0。我建议采用其中一种方法

num5 = 0.4 * num1;

num5 = 2 * num1 / 5;

0.4已经是5的倍数时,第二个可能更准确(因为double无法在num1中准确表示)。在第一种情况下,错误已经存在

答案 1 :(得分:1)

在整数数学中,2/5为0(余数为2)。在C中,如何使用结果不会影响计算结果的方式(规则已经足够复杂)。因此,将结果乘以double的事实不会改变计算2/5(两个整数的商)的方式。

答案 2 :(得分:0)

2和5是整数,它们不是双倍的。添加小数点将产生正确的结果。

像这样。

num5 = ((2.0/5.0)* num1);

  num5 = ((2.0/5)* num1);

  num5 = ((2/5.0)* num1);