在浮点输入中导出十进制数有时会将值减 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 很好地形象化了这一现象。
我正在尝试将浮动输入 (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 很好地形象化了这一现象。