1

我正在编写一个程序来获取两个数字的平均值。对于测试用例,2, 4输出不应为. 对于测试用例, 输出不应为.33.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 也失败了

4

2 回答 2

0

对于您的情况,您可以这样做,String.format("%d", (int)d)但前提是 d 没有小数部分。

其实已经有答案了:

如何在没有不必要的十进制 0 的情况下很好地将浮点数格式化为字符串?

于 2013-10-27T19:54:19.300 回答
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 的整数。

于 2013-10-27T20:01:27.733 回答