从double开始删除十进制后的尾随零

时间:2013-10-27 19:50:43

标签: java double

我正在编写一个程序来获得两个数字的平均值。对于测试用例,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来说这也失败了

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。