解法一
从0.5开始每次除以2,根据大小判断该位填0或者1。
测试点中出现了负数,和给出的数据范围不符,有问题。
另外评论区中有人指出非5结尾的小数运行程序后也可以正常转换,而实际上精度有缺失,这个跟double本身的存储有关。
class Solution {
public String printBin(double num) {
if ((num < 0) || (num > 1)) {
return "ERROR";
}
double x = 0.5;
StringBuilder strBuilder = new StringBuilder("0.");
while ((strBuilder.length() < 32) && (num > 0.0)) {
if (num >= x) {
strBuilder.append('1');
num -= x;
} else {
strBuilder.append('0');
}
x = x / 2;
}
if ((strBuilder.length() == 32) && (num > 0.0)) {
return "ERROR";
}
return strBuilder.toString();
}
}