如何计算10以外基数的浮点数?

bug*_*net 3 algorithm floating-point decimal-point radix-point radix

鉴于维基百科关于Radix Point的文章,如何计算二进制当量为10.1或十六进制当量为17.17?对于前者,十分之一的二进制当量是多少?对于后者,十六进制表示为17/100?

我正在寻找一种算法,而不仅仅是那两个例子的解决方案.

Ric*_*gan 6

要将十进制10.1转换为二进制,请分隔整数和小数部分并分别转换每个部分.

要转换整数部分,请使用重复整数除以2,然后按相反顺序写入余数:

10/2 = 5余数0

5/2 = 2余数1

2/2 = 1余数0

1/2 = 0余数1

答案:1010

要转换小数部分,请使用重复乘以2,在每一步减去整数部分.生成顺序的整数部分代表您的二进制数:

0.1*2 = 0.2

0.2*2 = 0.4

0.4*2 = 0.8

0.8*2 = 1.6

0.6*2 = 1.2

0.2*2 = 0.4

0.4*2 = 0.8

......(循环永远重复)

所以十进制0.1是二进制0.000110011001100 ...

(有关更详细的说明,请参阅我的文章http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/中的例程dec2bin_i()和dec2bin_f().

对于十六进制,使用相同的过程,除非除数/乘数为16而不是2.余数和大于9的整数部分必须直接转换为十六进制数字:10变为A,11变为B,...,15变为F .