我们知道在计算机中,所有的数据都是以1、0来表示的,为了方便程序员读写代码,使用了高级语言来编码,这时的数据就需要运用进制转换。我们以十进制小数转换为二进制小数为例:
十进制小数转换为二进制小数步骤: 整数部分转整数部分,小数部分转小数部分。
整数部分:辗转相除法
小数部分:十进制的值乘以2,如果结果大于1,则在二进制小数后补1,否则补0,直到结果为1.0
public class Test1 {
public static void main(String[] args) {
double a = 10.1;
/*
* 整数部分为:1010
* 小数部分为:000110011...0011
* 0.1*2 = 0.2;小于1补0
* 0.2*2 = 0.4;小于1补0
* 0.4*2 = 0.8;小于1补0
* 0.8*2 = 1.6;大于1补1
* 0.6*2 = 1.2;大于1补1
* 0.2*2 = 0.4;小于1补0
* 0.4*2 = 0.8;小于1补0
* 0.8*2 = 1.6;大于1补1
* 0.6*2 = 1.2;大于1补1
* ...
* 10.1的二进制为:1010.000110011...0011
*
*/
}
举例十进制小数0.1-0.9转换为二进制小数:
0.1 --> 0.0001100110011001100110011001100110011001100110011
0.2 --> 0.001100110011001100110011001100110011001100110011001101
0.3 --> 0.0100110011001100110011001100110011001100110011001101
0.4 --> 0.01100110011001100110011001100110011001100110011001101
0.5 --> 0.1
0.6 --> 0.100110011001100110011001100110011001100110011001101
0.7 --> 0.10110011001100110011001100110011001100110011001100111
0.8 --> 0.1100110011001100110011001100110011001100110011001101
0.9 --> 0.11100110011001100110011001100110011001100110011001101
所以可以看出大部分小数在计算机中是不精确的。