C标准库pow函数精度问题。
2017-05-26 22:35
197 查看
#include <stdio.h> int main () { int temp,i; double a=2.4568; unsigned char b[5]; for(i=0;i<5;i++) { temp=(int)a; b[i]=temp+'0'; a=(a-temp)*10; printf("%f %d\n",a,(int)a); } b[5]='\0'; puts(b); }
运行结果:
运行结果: 4.568000 4 5.680000 5 6.800000 6 8.000000 7 10.000000 9 24567 -------------------------------- Process exited with return value 0 Press any key to continue . . . 为什么最后的8.00000和10.00000被强制转换成7和9而不是8和10;
首先 float double这类的数据是近似值 有精度问题 这一点你知道吧 也就是说打印出来的8.0000 未必是8.00000 在你这个例子里面 我改了一下 改为打印出20位小数:
#include <stdio.h> int main () { int temp,i; double a=2.4568; unsigned char b[5]; for(i=0;i<5;i++) { temp=(int)a; b[i]=temp+'0'; a=(a-temp)*10; printf("%.20f %d\n",a,(int)a); } b[5]='\0'; puts(b); }
你再运行一下看看 可以发现8.00000实际上是7.99999999999872812850 所以会是转为int的7 一般来说 要把浮点转为int 要取得最近似的值 都是采用(int)(a+0.5) 从而达到一种四舍五入的效果
相关文章推荐
- 自己实现基本的C标准库字符串处理函数——基本问题(转载)
- 关于JavaScript parseFloat() 函数精度不一致的问题
- unity3d中Debug.Log函数浮点精度问题
- 关于pow的精度问题,HDU6182
- Object.ToString函数在转换日期类型数据时的精度问题
- C语言中关于pow()函数的问题
- 进制转换中pow()函数的问题
- C中关于sin(),cos(),pow()函数使用的一个问题
- JAVA问题总结之7--Pow、sin、sqrt、abs等常用数学函数调用
- 三出口函数:解决计算几何中的精度问题
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何实现开平方的Pow函数
- gcc编译器下pow函数编译的问题
- 关于在Eclipse中无法使用pow()、fmod()函数的问题
- 关于JavaScript parseFloat() 函数精度不一致的问题
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何实现开平方的Pow函数
- [C/C++]C语言中math.h和cmath的pow()精度问题
- 关于linux下时间延迟函数精度问题
- 精度丢失&const&scanf函数诸多问题
- 三出口函数解决计算几何精度问题!
- 自己实现基本的C标准库字符串处理函数——基本问题