我正在编写一个程序来获得两个数字的平均值。对于测试用例,2, 4
输出应为3
而不是3.0
。对于测试用例,-1282660896, -672813783
输出应为-977737339.5
而不是-9.777373395E8
。
我的代码是这样的:
public static void getAve(long a, long b){
System.out.println((double)(a + b) / 2);
}
我还创建了一个格式函数来满足我的需要,如下所示:
public static String fmt(double d) {
if (d == (long) d)
return String.format("%d", (long) d);
else
return String.format("%s", d);
}
但是对于测试用例2来说这也失败了
答案 0 :(得分:0)
对于您的情况,您可以执行String.format("%d", (int)d)
但仅在d没有小数部分的情况下。
实际上已经有了答案:
How to nicely format floating numbers to String without unnecessary decimal 0?
答案 1 :(得分:0)
对于案例2,您希望使用不使用科学记数法的格式并指定精度:
return String.format("%.1f", d); // only one digit fractional precision
请参阅http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax
另外,将double与int进行比较是危险的,因为double不能保证完全代表整数。你最好检查它是否接近一个整数,直到预定义的epsilon。