C 理解型铸造

C 理解型铸造,c,casting,C,Casting,我制作了一个非常简单的程序,将零钱(25美分、10美分、5美分和1美分)分发给用户。它将用户以现金形式输入的相同金额、价值和变化分配回。在我输入0.59之前,它一直表现良好 所以,在对程序稍加修改后,我就能够解决这个问题。然而,我仍然不明白我到底做了什么来修复它 所欠整数变动(浮动金额) { 任何解释都会很好。另外,如果已经问过这个问题,我很抱歉。在搜索stackoverflow时,我找不到解决方案。问题是0.01没有精确的浮点数表示,因此在计算更改时会出现舍入错误。理想的解决方案是避免使用g浮

我制作了一个非常简单的程序,将零钱(25美分、10美分、5美分和1美分)分发给用户。它将用户以现金形式输入的相同金额、价值和变化分配回。在我输入0.59之前,它一直表现良好 所以,在对程序稍加修改后,我就能够解决这个问题。然而,我仍然不明白我到底做了什么来修复它

所欠整数变动(浮动金额) {


任何解释都会很好。另外,如果已经问过这个问题,我很抱歉。在搜索stackoverflow时,我找不到解决方案。

问题是
0.01
没有精确的浮点数表示,因此在计算更改时会出现舍入错误。理想的解决方案是避免使用g浮点数。使用定点算术代替

例如,您可以使用整数值
345
,而不是像
3.45
这样的浮点数来表示三美元四十五美分。这种表示形式称为定点,因为在第二个到最后一个数字之前有一个假定的小数点

下面的示例程序显示了一种将美元金额(如3.45)读取为固定点数的方法

int main( void )
{
    int dollars, cents, count, amount;

    printf( "Enter amount: " );
    fflush( stdout );
    count = scanf( "%d.%d", &dollars, &cents );

    if ( count == 1 )
        amount = dollars * 100;
    else if ( count == 2 && cents < 100 )
        amount = dollars * 100 + cents;
    else
        amount = 0;

    printf( "%d\n", amount );
}
int main(无效)
{
整数美元、美分、计数、金额;
printf(“输入金额:”);
fflush(stdout);
计数=扫描频率(“%d.%d”,“美元和美分”);
如果(计数=1)
金额=美元*100;
否则如果(计数==2&¢s<100)
金额=美元*100+美分;
其他的
金额=0;
printf(“%d\n”,金额);
}

我们需要更多的代码,更改和金额是什么类型?在这个代码示例中,cast可能没有做任何事情,但这里的背景可能会有所帮助:更改是一个整数,金额是一个浮点。然后请更新问题,最好显示
更改
金额
的实际声明处理金钱的函数永远不能使用浮点值。浮点(和双精度)用于高等数学,而不是需要精确的加和减。用户3386109,我非常感谢您的反馈。
int main( void )
{
    int dollars, cents, count, amount;

    printf( "Enter amount: " );
    fflush( stdout );
    count = scanf( "%d.%d", &dollars, &cents );

    if ( count == 1 )
        amount = dollars * 100;
    else if ( count == 2 && cents < 100 )
        amount = dollars * 100 + cents;
    else
        amount = 0;

    printf( "%d\n", amount );
}