如何在JAVA中将两个int合并为一个double?

时间:2016-06-03 14:33:23

标签: java

如果我有:

int a = 123;
int b = 456;

我如何获得?:

double c = 123.456;

6 个答案:

答案 0 :(得分:10)

这个怎么样:

int a = 123; int b = 456;
double c = Double.parseDouble(a + "." + b);

答案 1 :(得分:7)

数学解决方案

  int a = 123; 
  int b = 456;

  double c = a + (b == 0 ? 0 : b / Math.pow(10, 1 + (int) Math.log10(b)));

说明:

   1 + (int) Math.log10(b)     // number of digits (3 in case of 123)
   Math.pow(10, 1 + ... )      // 10...0 - 1 with required number of zeroes

答案 2 :(得分:2)

从每个integer创建字符串,然后将字符串连接在一起,插入"。"两者之间。然后将生成的string转换为double

答案 3 :(得分:2)

如果你想采用一种纯粹的计算方法,而不是涉及在字符串和数字形式之间来回转换的方法,那么你可以这样做:

double concatToDouble(int integer, int fraction) {
    if (fraction < 0) {
        throw new NumberFormatException("The fractional part must not be negative");
    } else if (fraction == 0) {
        return integer;
    } else {
        int numFractionDigits = (int) Math.log10(fraction) + 1;
        int scaleFactor = (int) (Math.pow(10, numFractionDigits) + 0.1);

        return (double) ((long) integer * scaleFactor
                + (long) Math.signum(integer) * fraction)
                / scaleFactor;
    }
}

表达时间要长一点,但它会表现得更好,因为它涉及的工作量少于字符串格式的转换次数。

计算笔记:

  • 缩放向上整数部分,执行整数添加,然后缩放 down 总和将获得与{最接近的可能结果{1}}你想要,但
  • 在很多情况下,double没有完全表示您想要形成的十进制数字。
  • 我仔细而有意地选择了类型。特别是,我在计算缩放值之前将double的值转换为integer类型,以避免溢出。
  • 对于大于0的参数,
  • long返回1.0,对于小于零的参数,
  • Math.signum()返回-1.0。这允许该方法优雅地处理integer的负值。
  • 我将Math.pow()的结果加0.1,然后将结果截断为整数,以防pow()的结果(不一定完全)稍微小于确切结果。
然而,请注意,问题本身似乎并未考虑到(无限多个)无关紧要的前导零,这些前导零在概念上位于小数部分的有效数字之前。也就是说,如果没有第三个参数指示小数部分的比例,则无法获得123.0456123.00456等的结果。

答案 4 :(得分:0)

如果b的大小不合适,只需初始化一个新的包装器:

new Double(a + ((double)b / 1000))

请注意,我在这里明确地b double double,以获得b / 1000 onTriggerEnter值,而不是整数值。

答案 5 :(得分:0)

如果整体的大小不重要,

public class TestStackOverflowQuestion {

    public static void main(String[] args) {
        int a = 123;
        int b = 456;
        double c = a + Double.parseDouble("." + b);
        System.out.println(c);
    }
}