C语言中 浮点数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 14:26:30
// 请问一下为什么这里dS 值的小数位全为0?要怎么改一下呢?

#include <stdio.h>

int main()
{
double dX = 0; //发票总额
double dS = 0; //发票总额精确数
double dY = 0.7; //固定系统0.7
double dZ = 0; //公里数
int nMin = 0; //公里最小值
int nMax = 0; //公里最大值

printf("请输入发票总额:");
flushall();
scanf("%lf", &dX);
printf("请输入公里数最小值:");
flushall();
scanf("%d", &nMin);
printf("请输入公里数最大值:");
flushall();
scanf("%d", &nMax);

printf("产生的结果有:\n");
for(int i = 1; i < 1000; i++)
{
dZ = dX / dY / i;
dS = i * dY * dZ;
if ((dZ > nMin) && (dZ < nMax))
{
printf("%d * %.2f * %.4f = %.4f\n", i, dY, dZ, dS);
}
else if (dZ < nMin)
{
break;
}
}
return 0;
}
不对啊, 它由几个浮点数相乘而得的就应该还有小数位的啊, 但它总是小数位显示为零, 不知道为什么。

楼主啊,你的测试量不够所以不能说明问题
dZ = dX / dY / i;
dS = i * dY * dZ;
首先,你的理解没错误,这条语句
dS = i * dY * dZ;
i是整型量,dY和dZ是浮点量,因此
执行之后,得到dS也是浮点量,这个理解是正确的

你输入下面的测试下就知道了,因为你输入的数据不具有一般性
所以你会误认为是这样的,但是,实际不是这样的,要得到正确的看法
必须要输入大量的数据验证才可以的,下面给你一组数据,你进行输入看看

请输入发票总额:23.998
请输入公里数最小值:10.775
请输入公里数最大值:17.8888
产生的结果有:
3 * 0.70 * 11.4276 = 23.9980
请按任意键继续. . .

ps:对于32位机,float,其精度是为6位有效数字,你给我的数据超过了6位,在6位之外,自然不能显示出来,这个还和机器有关的

ds 不就是你输入的第一个数么?
你输入多少 就多少啊

float精确到6 位。
你直接小数相乘可以有8位,但是6位以后的不是精确值 。
如果你直接相乘的小数 结果是小于6位的 他就不会有8位了。

dS是发票总额精确数,是0说明在输出位数内精确啊.