0.5/0.1=4?

昨天一个小伙伴问了我个看上起很简单的找钱问题…因为他写的是C模式,输入输出看起来别扭所以我又做了一下…
代码如下

#include <iostream>
using namespace std;

int main()
{
    double money;
    cin>>money; //cin>>可以输入任何类型的数据,这比C中的scanf好用。
    int n001=0;int n005=0;//分
    int n01=0;//角
    int n1=0,n2=0,n5=0,n10=0,n50=0,n100=0;//元

    n100=money/100;
    cout<<"n100:"<<n100<<endl;//cout<<是c++中的输出,可以输出任何类型 cout<<endl表示切换到下一行
    money=money-100*n100;
    cout<<"余额"<<money<<endl<<endl;

    n50=money/50;
    cout<<"n50:"<<n50<<endl;
    money=money-50*n50;
    cout<<"余额"<<money<<endl<<endl;

    n10=money/10;
    cout<<"n10:"<<n10<<endl;
    money=money-10*n10;
    cout<<"余额"<<money<<endl<<endl;

    n5=money/5;
    cout<<"n5:"<<n5<<endl;
    money=money-5*n5;
    cout<<"余额"<<money<<endl<<endl;

    n2=money/2;
    cout<<"n2:"<<n2<<endl;
    money=money-2*n2;
    cout<<"余额"<<money<<endl<<endl;

    n1=money/1;
    cout<<"n1:"<<n1<<endl;
    money=money-n1;
    cout<<"余额"<<money<<endl<<endl;

    n01=money/0.1;
    cout<<"n01:"<<n01<<endl;
    money=money-0.1*n01;
    cout<<"余额"<<money<<endl<<endl;

    n005=money/0.05;
    cout<<"n005:"<<n005<<endl;
    money=money-0.05*n005;
    cout<<"余额"<<money<<endl<<endl;

    n001=money/0.01;
    cout<<"n001:"<<n001<<endl;
    money=money-0.01*n001;
    cout<<"余额"<<money<<endl<<endl;
    return 0;
}

输出如下:
221.5
n100:2
余额21.5

n50:0
余额21.5

n10:2
余额1.5

n5:0
余额1.5

n2:0
余额1.5

n1:1
余额0.5

n01:4
余额0.1

n005:1
余额0.05

n001:4
余额0.01

这里出现一个问题
0.5/0.1竟然等于4
现在我把这个问题单独提取出来

#include <iostream>
using namespace std;

int main()
{
    double a=0.5;
    int n=a/0.1;
    cout<<n<<endl;
    return 0;
}

输出:
4

Process returned 0 (0x0) execution time : 0.472 s
Press any key to continue.

但是把int n改成double n结果确实正确的

#include <iostream>
using namespace std;

int main()
{
    double a=0.5;
    double n=a/0.1;
    cout<<n<<endl;
    return 0;
}

输出:
5

Process returned 0 (0x0) execution time : 0.361 s
Press any key to continue.

我觉得这个问题可以这样浅显且非正规的解释成:
int n=0.5/0.1;
此时0.5/0.5=4.9999999
然后int(4.9999999)
就是4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值