乘2挪整:二进制表示浮点整数

题目

给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25,0.125……)。
如果该数字无法精确地用32位以内的二进制表示,则打印”ERROR”

思路

将改浮点数*2,得到一个新的$num,再判断$num>=1,如果大于则在0.后面拼接上1,否则拼接0,最后循环至$num==0结束

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getBin($num) {
$s = "0.";
while ($num != 0) {
echo $num. PHP_EOL;
$num *= 2;
if ($num >= 1) {
$s .= 1;
$num -= 1;
} else {
$s .= 0;
}
if (strlen($s) == 34) {
return 'ERROR';
}
}
return $s;
}

echo getBin(0.625);

结果

1
2
3
4
0.625
0.25
0.5
0.1011
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!