了解类型转换

Understanding Type Casting

我制作了一个非常简单的程序,用于向用户分发零钱(25 美分、10 美分、5 美分和便士)。它分配回与用户输入现金相同的数量、价值和变化。在我输入之前它表现良好:0.59 因此,在稍微修改程序之后,我能够解决这个问题。但是,我仍然不明白我到底做了什么来修复它...

int change_owed(浮点数) {

int change, coins;
change = coins = 0;

change = (float)(amount * 1000000.0);
change /= 10000;

任何解释都很好。另外,如果这个问题已经被问到,我深表歉意。在搜索Whosebug时,我找不到解决方案。

问题是0.01没有精确表示为浮点数,所以在计算变化时会出现舍入误差。理想的解决方案是完全避免使用浮点数。请改用定点算法。

例如,您可以使用整数值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 );
}