C 有没有办法把0.15转换成15

C 有没有办法把0.15转换成15,c,floating-point,integer,C,Floating Point,Integer,我想转换一个浮点数,比如0.15->15或0.4->4 我的想法是 将数字与浮点位数相乘 把它放在地板上 将其转换为(int) 不知道如何做第一步 澄清:我必须做一个程序,使用贪婪算法,用户输入更改。然后,该程序将检查可能发放的最低数量的硬币 代码: 所以我必须用整数来消除浮点错误,如果这有意义的话,你不需要从浮点转换成整数来让程序工作。 从我所看到的,问题是你的程序不知道当它达到0时该做什么,可能是因为它从来没有真正达到绝对零。解决此问题的一种方法是添加一个额外的else if语句,每当

我想转换一个浮点数,比如
0.15->15
0.4->4

我的想法是

  • 将数字与浮点位数相乘

  • 把它放在地板上

  • 将其转换为(int)

  • 不知道如何做第一步

    澄清:我必须做一个程序,使用贪婪算法,用户输入更改。然后,该程序将检查可能发放的最低数量的硬币

    代码:


    所以我必须用整数来消除浮点错误,如果这有意义的话,你不需要从浮点转换成整数来让程序工作。 从我所看到的,问题是你的程序不知道当它达到0时该做什么,可能是因为它从来没有真正达到绝对零。解决此问题的一种方法是添加一个额外的else if语句,每当其值小于0.01时,该语句将所欠现金设置为小于0:

        else if(cash_owed < 0.01)
        {
            cash_owed = -1;
        }
    
    因此,您的while循环最终如下所示:

    while(cash_owed > 0)
    {
    
        if(cash_owed >= 0.25)
        {
            cash_owed -= 0.25;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed >= 0.10)
        {
            cash_owed -= 0.10;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed >= 0.05)
        {
            cash_owed -= 0.05;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed >= 0.01)
        {
            cash_owed -= 0.01;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed < 0.01)
        {
            cash_owed = -1;
        }
    }
    
    while(所欠现金>0)
    {
    如果(所欠现金>=0.25)
    {
    所欠现金-=0.25;
    printf(“所欠现金:%f\n”,所欠现金);
    硬币++;
    printf(“硬币:%d\n”,硬币);
    }
    否则,如果(所欠现金>=0.10)
    {
    所欠现金-=0.10;
    printf(“所欠现金:%f\n”,所欠现金);
    硬币++;
    printf(“硬币:%d\n”,硬币);
    }
    否则,如果(所欠现金>=0.05)
    {
    所欠现金-=0.05;
    printf(“所欠现金:%f\n”,所欠现金);
    硬币++;
    printf(“硬币:%d\n”,硬币);
    }
    否则,如果(所欠现金>=0.01)
    {
    所欠现金-=0.01;
    printf(“所欠现金:%f\n”,所欠现金);
    硬币++;
    printf(“硬币:%d\n”,硬币);
    }
    否则,如果(所欠现金<0.01)
    {
    所欠现金=-1;
    }
    }
    
    只要您的用户输入有效的金额(因此您可能需要添加一个检查,以确保他们添加的小数不超过2位),这项功能就可以正常工作

    转换浮点数,如0.15->15或0.4->4

  • 识别0.15和0.4不完全可编码为浮点数,因为它们不是通常使用的:例如。相反,附近的值保存在
    现金中

  • 将浮点数乘以100。由于产品测定可能会四舍五入,且原始数字可能仅接近几位小数,因此将结果四舍五入。使用floor可能需要xxx.9999的值。。。到xxx.0,而不是更合理的xxx.0+1

    #include <math.h>
    long cash_in_cets = lround(cash * 100.0);
    
    #包括
    多头现金=多头(现金*100.0);
    

  • 使用整数数学和整数美分继续贪婪算法的其余部分



    我的水晶球暗示下一个版本的C将指定十进制浮点数,这是一个很好的货币解决方案



    代码只能使用FP类型,但是像(cash\u owed>=0.10)这样的测试过于简单/错误,需要大量返工。最好转到整数数学。

    好吧,如果你想去那里,我不会从这里开始。。。抛开f-p,以整数形式工作,不管你怎么称呼他们。在正确的位置插入
    要比使f-p算术按您希望的方式运行容易得多。如果性能不重要:1)将其转换为字符串/char[],2)去掉小数点和小数点的左侧,3)再次将铰刀转换为数值。完成。您将遇到浮点不准确的严重问题。例如,如果用户输入了
    0.34
    ,并且最接近的浮点表示形式是
    0.3399765
    ,该怎么办?把它围起来?那么,如果用户实际输入了
    0.3399765
    ,您将如何处理这种情况?您几乎必须知道用户输入的内容,以确保正确处理。您也可以只处理输入字符串。@holex摆脱。。。还有小数点的左边,我想左边还是需要的,不是吗?如果用户输入了一些美元,那么你就不想转换。4到4;你想把.4换成40,因为.4美元等于40美分。如果用户输入的是浮点数,且无法更改,则只需乘以100,然后使用
    round
    函数将其四舍五入为最接近的整数:
    int cents=round(x*100)。然后用美分做剩下的工作。我不是你的投票人,但告诉OP:你不需要从浮点转换成整数来让程序工作。这表明你可能没有抓住重点。从那一点上说,你的回答不太可能是正确的。(我不认为这是。)试着再次阅读这篇文章,以及它的评论,然后编辑你的回答:)是的,当然,不要让你的ppl投反对票,而不是告诉你出了什么问题。顺便说一句,我只是需要使用round函数来消除我的项目的精确度,使用
    float
    常量,如
    0.10f
    来匹配
    float cash
    可能会减少一类问题。使用偏移0.005的阈值也很有用。然而,这些仅仅是使用FP数学计算货币所需的一个开始。从.07(0.0700000002980223223876953125 in
    float cash_ou
    )开始,此代码计算需要2个硬币,但正确答案是3(1个镍币和2个便士)。“我的水晶球暗示下一版本的C将指定十进制浮点数。”你有消息来源吗?没有它,我认为这是不可能的,因为它不符合C的目标,在许多平台上用C实现是一件痛苦的事情,而且几乎没有实际的用例。@124312344123411234123您可能是一个?“十进制浮点运算”可能是可选功能。
        else if(cash_owed >= 0.01)
        {
            cash_owed -= 0.01;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
    
    while(cash_owed > 0)
    {
    
        if(cash_owed >= 0.25)
        {
            cash_owed -= 0.25;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed >= 0.10)
        {
            cash_owed -= 0.10;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed >= 0.05)
        {
            cash_owed -= 0.05;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed >= 0.01)
        {
            cash_owed -= 0.01;
            printf("Cash owed: %f\n", cash_owed);
            coins++;
            printf("Coins: %d\n", coins);
        }
        else if(cash_owed < 0.01)
        {
            cash_owed = -1;
        }
    }
    
    #include <math.h>
    long cash_in_cets = lround(cash * 100.0);