如果我有:
int a = 123;
int b = 456;
我如何获得?:
double c = 123.456;
答案 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;
}
}
表达时间要长一点,但它会表现得更好,因为它涉及的工作量少于字符串格式的转换次数。
计算笔记:
double
没有完全表示您想要形成的十进制数字。double
的值转换为integer
类型,以避免溢出。long
返回1.0,对于小于零的参数,Math.signum()
返回-1.0。这允许该方法优雅地处理integer
的负值。Math.pow()
的结果加0.1,然后将结果截断为整数,以防pow()
的结果(不一定完全)稍微小于确切结果。 123.0456
,123.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);
}
}