以下是我的代码和程序输出:
#include <stdio.h>
int main()
{
float salary;
printf("Please enter the salary : ");
scanf("%f", &salary);
printf("Your Salary is : %f\n", salary);
}
desktop:~$ ./a.out
Please enter the salary : 101.8889999
Your Salary is : 101.889000
desktop:~$
我通过输入随机十进制值尝试了很多方法,但有时它会打印正确的值(在scanf调用期间输入),有时它只是打印一些接近它的东西。为什么浮点变量值没有输入正确的值?
如上例所示 - 如果我输入101.8889999,那么保存在工资浮动变量中的值是101.889000?
我尝试将最后一行更改为:
printf("Your Salary is : %10.9f\n", salary);
但它仍然给出了以下输出:
Please enter the salary : 101.889000
Your Salary is : 101.888999939
Please enter the salary : 10.999999999
Your Salary is : 11.000000000
使用printf打印float的正确值是什么?是否可以将浮点值存储为浮点变量输入的精确值?
答案 0 :(得分:3)
在C和许多其他语言中,浮点数以固定的位数(通常为32或64)存储,因此它们可以具有多少精度,并且只有有限数量的数字可以使用float精确表示。对于所有其他数字,浮点数只能存储近似值。您可以通过打印8 * sizeof(float)
的值来查看使用了多少位。
此外,浮点运算通常具有舍入误差,这使得它们不适合处理货币。
如果您正在处理金钱,您可以考虑将值存储为一个整数,表示便士的数量,或一分钱的百分之一,或类似的东西。