解法一

从0.5开始每次除以2,根据大小判断该位填0或者1。
测试点中出现了负数,和给出的数据范围不符,有问题。
另外评论区中有人指出非5结尾的小数运行程序后也可以正常转换,而实际上精度有缺失,这个跟double本身的存储有关。

  1. class Solution {
  2. public String printBin(double num) {
  3. if ((num < 0) || (num > 1)) {
  4. return "ERROR";
  5. }
  6. double x = 0.5;
  7. StringBuilder strBuilder = new StringBuilder("0.");
  8. while ((strBuilder.length() < 32) && (num > 0.0)) {
  9. if (num >= x) {
  10. strBuilder.append('1');
  11. num -= x;
  12. } else {
  13. strBuilder.append('0');
  14. }
  15. x = x / 2;
  16. }
  17. if ((strBuilder.length() == 32) && (num > 0.0)) {
  18. return "ERROR";
  19. }
  20. return strBuilder.toString();
  21. }
  22. }