zoukankan      html  css  js  c++  java
  • 分数化小数(decimal)

    分数化小数

    ①我的程序

    #include<iostream>
    using namespace std;
    int main(void)
    {
    int a,b,c,kase=0;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF&&(a||b||c))
    {
    printf("Case %d: %.cf ",++kase,(double)a/b);
    }
    return 0;
    }

     测试

    看其他数据会输出什么结果

     问题:是不是printf("Case %d: %.cf ",++kase,(double)a/b);此句中的%.cf有问题?导致无法实现分数到小数的转换。

     解决:查资料知:保留的小数位数要手动输入时,需要自己写程序模拟保留小数位数的过程(注意四舍五入),要直接通过计算机的浮点运算来实现不太可能,即用%.cf只是主观臆测。因为这涉及到多次类型转换,而每次从高到低的类型转换都会直接截断导致数据丢失,所以只能按位输出,在需要输出的最后一位需要根据下一位的数值来判断是否进位。

     改正后:

    #include<iostream>
    using namespace std;
    int main(void)
    {
    long long a,b;
    int c,kase=0;
    while(scanf("%lld%lld%d",&a,&b,&c)!=EOF&&(a||b||c))
    {
    printf("Case %d: %lld.",++kase,a/b);
    a%=b;
    for(int i=1;i<c;i++){
    printf("%lld",a*10/b);
    a=a*10%b;
    } //最后一位不在循环里因为最后一位还需要判断四舍五入
    if(a*10%b*10/b<5)
    printf("%lld ",a*10/b);
    else
    printf("%lld ",a*10/b+1);
    }
    return 0;
    }

     测试:

    试下其他数据:

    成功!

  • 相关阅读:
    来自师兄的Django2.0笔记摘录
    2019-03-24 周日
    关于Djanggo的环境变量
    接口文档模板(Markdown)
    Nginx配置
    虚拟机和宿主机通信
    node+mongodb+win7
    【进击后端】linux安装最新版nodejs
    【进击后端】ubuntu 快速安装node mongodb express
    【进击后端】mongodb入门
  • 原文地址:https://www.cnblogs.com/slay/p/9326520.html
Copyright © 2011-2022 走看看