了解类型转换

时间:2015-03-18 22:23:01

标签: c casting

我做了一个非常简单的程序,将更改(四分之一,硬币,硬币和便士)分发给用户。它以与用户现金相关的变化分配相同的金额,价值。在输入之前它表现良好:0.59 所以,在修改程序后,我能够解决这个问题。但是,我仍然不明白我究竟做了什么正确的修复......

int change_owed(浮动金额) {

int change, coins;
change = coins = 0;

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

任何解释都会很棒。此外,如果已经提出这个问题,我道歉。在搜索stackoverflow时,我找不到解决方案。

1 个答案:

答案 0 :(得分:2)

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

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

以下示例程序显示了一种将美元金额(如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 );
}