【问题标题】:Transformation of two integers into a double in Java在Java中将两个整数转换为双精度数
【发布时间】:2020-11-05 15:31:41
【问题描述】:

这是任务:

在“Functionality.java”类中实现一个名为“createDouble”的静态公共方法。该方法获取两个整数值 a 和 b 作为输入,并将它们转换为双精度值并返回如下:

  • 第一个输入值 a,应放在逗号或点之前。
  • 第二个输入值 b 应该在逗号或点之后,并且应该删除多余的零。

不能使用导入来解决此任务。此外,禁止使用数学库或其他库。实现一种算法,其中至少包含一个有意义的循环。

这是我的想法:

public class Functionality {

    public static double createDouble(int a, int b) {
        double c = b;
        double d = 1;
        while (c >= 1) {
            c /= 10;
            d *= 10;
        }
        return a + b/d;
    }

    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(createDouble(12, Integer.MAX_VALUE));
    }
}

问题是我使用了我不应该使用的方法 Integer.MAX 值。是否有另一种选择来编写此代码?

【问题讨论】:

  • 我不明白你的老师为什么要你使用循环。这个项目是纯粹的位操作。你正在将两个 4 字节的值转换成一个 8 字节的值。
  • 我的意思是,可能是因为他们正在学习循环和位操作,不是吗?
  • 有一个公式可以将小数转换为分数,两个整数。它是迭代的,并且怀疑这是相反的。
  • Markspace 是指 IEE754 吗?
  • 我认为 IEEE754 在这里不合适。处理偏移量和隐含位可能超出了本练习的范围。

标签: java eclipse integer double algebraic-data-types


【解决方案1】:

您的代码看起来不错,我会做一个小小的 tweek。您的变量 c 将等于您希望 b 在完成除法后的值,因此您可以直接使用它。否则,您根本不需要使用Integer.MAX_VALUE。只需使用任意值。

public class Functionality
{
  public static double createDouble(int a, int b) {
    double c = b;
    while(c >= 1)
      c /= 10;
    return a + c;
  }
  
  public static void main(String[] args) {
    System.out.println(createDouble(15, 351));
    System.out.println(createDouble(32, 8452));
  }
}

输出:

15.351
32.8452

【讨论】:

    【解决方案2】:

    这是我的实现

    public class Functionality {
        private static double logb10(double num){
            return (num > 1) ? 1 + logb10(num / 10) : 0;
        }
        public static double createOtherDouble(int a, int b) {
            double c = a;
            int len =(int) logb10(b);
            double d = b;
            for(int i = 0; i < len; i++){
                d /= 10;
            }
            return c + d;
        }
         public static void main(String []args){
            System.out.println(Integer.MAX_VALUE);
            System.out.println(createOtherDouble(12, Integer.MAX_VALUE));
         }
    }
    

    【讨论】:

    • 显然你错过了关于数学库或其他库的使用。所以String.valueOf()是一个禁忌。
    • 你问错人了。但我认为您编写的任何不使用 API 中的任何类的方法都可以。但是你不应该给 OP 答案。让他们解决。
    • “OP”是什么意思??
    • 原始海报。提出问题的人。
    • 你的log方法是从哪里来的?
    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2016-01-01
    • 2013-05-13
    • 2014-04-18
    • 1970-01-01
    • 2018-04-01
    • 2010-12-31
    相关资源
    最近更新 更多