烂冬瓜狮子头 发表于 2020-10-24 02:43:54

关于精度的问题?

https://fishc.com.cn/forum.php?mod=image&aid=135234&size=300x300&key=467db33b2c9c253e&nocache=yes&type=fixnone










不明白最后代码为什么/10和/10.0的输出结果有的有问题,有的没问题?


wp231957 发表于 2020-10-24 06:36:56

除以10.0就可以了

风过无痕1989 发表于 2020-10-24 08:48:48

你定义的变量均为整型,整型除法是取整数,如 /10

/10.0 是强制转换为浮点数进行除法,还有两种方法就是:

1.0 * totalScore / 10
(float)totalScore / 10

这两种写法的目的是强制转换为浮点数进行运算

烂冬瓜狮子头 发表于 2020-10-25 04:20:06

风过无痕1989 发表于 2020-10-24 08:48
你定义的变量均为整型,整型除法是取整数,如 /10

/10.0 是强制转换为浮点数进行除法,还有两种方法就是 ...

不是啊,问题我的问题是说为什么/10不会得到正确的结果,但是的话/10.0却可以

风过无痕1989 发表于 2020-10-25 09:34:51

烂冬瓜狮子头 发表于 2020-10-25 04:20
不是啊,问题我的问题是说为什么/10不会得到正确的结果,但是的话/10.0却可以

整数除10的结果是整数,比如:int 6 / 10 = 0 (在C语言的概念中就是如此,而在我们平时的概念是等于0.6的)
浮点数除10是整数带小数,比如:float6 / 10 = 0.6
双精度除10是整数带小数,比如:double6 / 10 = 0.6

看下面的例子:


#include <stdio.h>

int main(void)
{
    int a = 6,b = 10, x;
    float c = 6.0,d =10.0, y;
    double e = 6.0,f =10.0, z;
    x = a / b;
    y = c / d;
    z = e / f;

    printf("整数除法:a / b = %d\n",x);
    printf("浮点数除法:c / d = %f\n",y);
    printf("双精度除法:e / f = %lf\n",z);

    return 0;
}


输出:
整数除法:a / b = 0
浮点数除法:c / d = 0.600000
双精度除法:e / f= 0.600000

-------------------------------------------------------
Process exited after 0.3456 seconds with return value 0
请按任意键继续...
页: [1]
查看完整版本: 关于精度的问题?