《强制类型转化与浮点数的存储问题》
2014-09-03 23:52
155 查看
强制类型转化
格式:(数据类型)(表达式)
功能:把表达式的值强制转化为前面所执行的数据类型。
例子:(int)(3.3+2.2) 最终值是5
(float)(6) 最终值是6.000000
求1+1/2+1/3........1/100:
#include <stdio.h>
void main()
{
int i;
float sum=0;
for (i=1;i<=100;i++)
{
sum=sum+1/(float)(i); (或:sum=sum+1.0/i;)
}
printf("%f\n",sum);
}
/*
输出结果是:5.187378
*/
浮点数的存储所带来的问题
float和double都不能保证精确的存储一个小数,如输入的的值是5.000000但它可能保存的是4.999999。
举例:
有一个浮点型变量X,如何判断X的值是不是零?
if(|x-0.000001|<=0.000001)
x是零
else
x不是零
为什么循环更新的变量不能定义成浮点型?
举例:
#include <stdio.h>
void main()
{
float i;
float sum=0;
for (i=1.0;i<=100;i++)
{
sum=sum+1/i;
}
printf("%f\n",sum);
}
此程序生成结果为5.187378,但会因为i的值的误差而引起sum的值的变化。
格式:(数据类型)(表达式)
功能:把表达式的值强制转化为前面所执行的数据类型。
例子:(int)(3.3+2.2) 最终值是5
(float)(6) 最终值是6.000000
求1+1/2+1/3........1/100:
#include <stdio.h>
void main()
{
int i;
float sum=0;
for (i=1;i<=100;i++)
{
sum=sum+1/(float)(i); (或:sum=sum+1.0/i;)
}
printf("%f\n",sum);
}
/*
输出结果是:5.187378
*/
浮点数的存储所带来的问题
float和double都不能保证精确的存储一个小数,如输入的的值是5.000000但它可能保存的是4.999999。
举例:
有一个浮点型变量X,如何判断X的值是不是零?
if(|x-0.000001|<=0.000001)
x是零
else
x不是零
为什么循环更新的变量不能定义成浮点型?
举例:
#include <stdio.h>
void main()
{
float i;
float sum=0;
for (i=1.0;i<=100;i++)
{
sum=sum+1/i;
}
printf("%f\n",sum);
}
此程序生成结果为5.187378,但会因为i的值的误差而引起sum的值的变化。
相关文章推荐
- 关于ofstream乱码的问题及其强制类型转化
- 验证码小练习强制将int类型转化为char类型遇到的小问题
- 【原创】使用反射之后,强制类型转化不成功的问题在哪?
- 结构体的强制类型转化(android中的代码问题)
- 强制类型转化相关问题
- 莫名的无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为XXX问题
- ActionForm空字段问题和struts类型转化器
- 一个有关Update类型的存储过程的问题
- 关于C#中货币类型和数值类型、字符串类型的转化和在DataGridView中的显示问题:
- c#的is,as,强制类型问题
- Spring IoC高级特性---Spring自动转化其他非String类型值的问题
- 从EXCEL导入文件时无法将DBNull.Value强制转换为类型。。。,请使用可空类型 问题的解决
- 指定CodePage类型,强制解决数据库查询乱码问题
- oracle+jsp中blob类型存储大文本问题解决方法
- C++类型转化分析:强制转换,动态转换,静态转换等。
- oracle+jsp中blob类型存储大文本问题解决方法
- flex 装载多个module出现的问题Error #1034: 强制转换类型失败
- ASP.Net中用ViewState存储自定义复杂对象后类型转换的一个问题
- access中,有无将文本类型的数据格式转化成数值型的函数?(解决 order by 的非数字排序问题)
- [导入]引用在强制类型转化中的应用