打印浮点变量

时间:2014-08-06 17:11:47

标签: c

以下是我的代码和程序输出:

#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的正确值是什么?是否可以将浮点值存储为浮点变量输入的精确值?

1 个答案:

答案 0 :(得分:3)

在C和许多其他语言中,浮点数以固定的位数(通常为32或64)存储,因此它们可以具有多少精度,并且只有有限数量的数字可以使用float精确表示。对于所有其他数字,浮点数只能存储近似值。您可以通过打印8 * sizeof(float)的值来查看使用了多少位。

此外,浮点运算通常具有舍入误差,这使得它们不适合处理货币。

如果您正在处理金钱,您可以考虑将值存储为一个整数,表示便士的数量,或一分钱的百分之一,或类似的东西。