鱼C论坛

 找回密码
 立即注册
查看: 1076|回复: 3

为什么输出1.365,输出的b为0,而不是1

[复制链接]
发表于 2023-10-13 14:19:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;
int main()
{
        double m;
        int a,b,c,d,e;
        cout<<"请输入一个三位小数:"<<"";
        cin>>m;
        a=100*m;
        b=a/1000;
        c=(a/100)%10;
        d=(a-(a/100)*100)/10;
        e=a-1000*b-100*c-10*d;
        cout<<"输出结果为:"<<b<<"  "<<c<<"  "<<d<<"  "<<e<<endl;
       
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 14:19:55 | 显示全部楼层
这是因为在计算a=100*m时,m的值为1.365,但由于浮点数的精度问题,m可能被存储为1.364999999999999或1.365000000000001等值,导致a的值可能为136或137,而不是我们期望的136.5。因此,当b=a/1000时,b被计算为0,而不是1。

为了解决这个问题,可以使用四舍五入函数来确保a的值正确地舍入到最接近的整数。可以使用如下代码替换原始代码中的a=100*m行:

a = round(100 * m);

round()函数将参数四舍五入为最接近的整数,并返回结果作为double类型的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 14:20:26 | 显示全部楼层
这段代码的目的是将一个三位小数拆分为四个整数。这四个整数分别是小数点前的数(b),以及小数点后的三个数(c,d,e)。

首先,你输入一个三位小数m,然后将其乘以100,得到一个整数a。这个整数a是你输入的小数m的100倍。

然后,你将a除以1000,得到b。因为a是m的100倍,所以a除以1000就相当于m除以10。因此,b是小数点前的数。

接下来,你通过一系列的运算得到小数点后的三个数c,d,e。

现在,让我们来看看为什么当你输入1.365时,b的值为0,而不是1。

当你输入1.365时,a的值为136.5。然后,你将136.5除以1000,得到0.1365。因为b是一个整数,所以0.1365会被舍去小数部分,得到0。这就是为什么b的值为0,而不是1。

如果你想让b的值为小数点前的数,你应该将a除以100,而不是1000。这样,当你输入1.365时,a的值为136.5,然后你将136.5除以100,得到1.365。舍去小数部分后,b的值就为1了。

所以,你可以将代码中的b=a/1000;改为b=a/100;,这样就可以得到你想要的结果了。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 14:21:25 | 显示全部楼层
这是因为对于输入的三位小数,你使用了错误的计算方法来提取百、十、个位上的数字。

在你的代码中,使用了a = 100 * m将小数转换成整数形式。然后,尝试通过b = a / 1000来提取百位上的数字。然而,这样的计算方式是不正确的。因为a/1000会自动地进行整数除法,结果会直接截断小数部分。所以当输入的三位小数大于1时,百位上的数字会被错误地计算。

为了正确提取百、十、个位上的数字,你可以使用以下修改后的代码:
#include<iostream>using namespace std;int main() {    double m;    int a, b, c, d, e;    cout << "请输入一个三位小数:";    cin >> m;    a = int(m * 1000);  // 将小数转换成整数形式    b = (a / 100) % 10;  // 提取百位上的数字    c = (a / 10) % 10;   // 提取十位上的数字    d = a % 10;          // 提取个位上的数字    e = a / 1000;        // 提取小数点后一位上的数字    cout << "输出结果为:" << b << "  " << c << "  " << d << "  " << e << endl;    return 0;}
这段代码将输入的小数乘以1000后转换成整数形式,并使用取余和整除操作来提取百、十、个位上的数字,同时通过除以1000来提取小数点后一位上的数字。这样就可以正确地输出结果。

希望以上解释和修改对你有帮助。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-3 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表