任何使用二进制浮点数的编程语言都会有这个问题精度丢失问题,如 C++、C#、java 等。
- C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题.
这里有人有疑问,C++ cout 出来的数据是期望得到的值,就认为 c++ 没这个精度问题,这就是纯胡扯,自己写两行代码试试不就知道了。
double a = 1.11;
double b = 2.22;
double c = b - a; //1.1100000000000001 浮点数精度问题依然存在
cout << c; //1.11 这里 cout 中对输出内容做了优化而已
1. 了解什么是二进制浮点数编程语言
即再计算机中是使用二进制进行加减乘除的编程语言。 计算过程如下:
- 用户输入的是十进制数字
- 编程语言进行计算处理时,会先转换为二进制数字
- 再进行二进制计算
- 最后再将二进制计算结果转换为十进制后输出。
故,只要处理计算浮点数用的是二进制,就属于二进制浮点数编程语言。
2. 了解进制转换
参考链接
2.1 十转二
十转二转换步骤为:
- 整数部分除 2 取余,逆序排列
- 小数部分使用乘 2 取整数位,顺序排列
例:
2.1 转为二进制:整数部分 22 / 2 = 1 .... 0 1 / 2 = 0 .... 1 # 10小数部分 10.1 * 2 =</