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;
    }

     测试:

    试下其他数据:

    成功!

  • 相关阅读:
    设计模式详解(图码)
    设计模式详解(图)
    Zookeeper学习
    取消单元格的点击事件
    ios 中生成随机数
    IOS 时间和时间戳之间转化
    偏好存空判断
    限制textfield的文字长度
    tabBar的图标不被系统渲染
    (转)IOS http请求的get 和 post的请求的区别
  • 原文地址:https://www.cnblogs.com/slay/p/9326520.html
Copyright © 2011-2022 走看看