在浮点输入中导出十进制数有时会将值减 1

Deriving decimal numbers in float input sometimes minus the value by 1

我正在尝试将浮动输入 (xx.yy) 中的数字分开并将它们提取出来。 不太确定这是否是在线编译器错误,但由于某些原因,有时我 运行 我的以下代码,我提取的小数位看似 -1 的值。

我正在使用这个在线编译器 (https://repl.it/languages/c)。

#include <stdio.h>

int main()
{
    int whole_num = 0;
    int dec_num = 0;

    float u_input = 0.0;
    printf("Input in a float: ");
    scanf("%f", &u_input);

    whole_num = (int) u_input;
    printf("1. Whole number is %d\n", whole_num);

    dec_num = (u_input - whole_num)*100;
    printf("2. Decimal number is %d\n", dec_num);

    return 0;

}

例如,有时我输入 99.95,而不是期望 95 为我的 dec_num,它给了我 94。再一次,如果我使用另一个输入,例如 123.95 它 returns 我 95 代替。结果,如果我的代码给出了 -1 结果,它将在我的 code.Decimal

的其他部分失败

我无法确定这是否是我编写代码的方式有误和/或编译器是否有问题(也尝试过其他在线编译器,它们似乎给了我类似的结果)

任何人都可以就此与我分享任何见解吗?或者,如果有适当的方法,我将得到没有 -1 的预期十进制数?

浮点数使用二进制表示法表示(参见 https://en.wikipedia.org/wiki/IEEE_754)。

因此,没有精确二进制表示的十进制数将存储为所需值的近似值。

例如,像 1.25 这样的值有一个精确的二进制表示 (5*(2^-2)),而像 1.3 这样的数字则没有并且需要被近似。

website 很好地形象化了这一现象。