在保持尾随零的同时舍入双倍

时间:2015-01-08 02:42:41

标签: java math double rounding

这是我的函数来舍入一个最多两位小数的数字但是当舍入数字是1.50时,它似乎忽略了尾随零并且只返回1.5

public static double roundOff(double number) {
        double accuracy = 20;
        number = number * accuracy;
        number = Math.ceil(number);
        number = number / accuracy;
        return number;
    }

因此,如果我发送1.499,则返回1.5,因为我想要1.50

4 个答案:

答案 0 :(得分:14)

这是一个印刷问题:

double d = 1.5;
System.out.println(String.format("%.2f", d)); // 1.50

答案 1 :(得分:3)

1.5是有效位数,相同1.50(甚至1.5000000000000)。

您需要将数字的与其演示文稿分开。

如果您希望输出两位小数,只需使用String.format,例如:

public class Test
{
    public static void main(String[] args) {
        double d = 1.50000;
        System.out.println(d);
        System.out.println(String.format("%.2f", d));
    }
}

输出:

1.5
1.50

如果您仍然想要一个为您完成所有操作的功能并且为您提供特定格式,则您需要返回字符串,例如:

public static String roundOff(double num, double acc, String fmt) {
    num *= acc;
    num = Math.ceil(num);
    num /= acc;
    return String.format(fmt, num);
}

并将其命名为:

resultString = roundOff(value, 20, "%.2f"); // or 100, see below.

这将允许您以您想要的任何方式定制精度和输出格式,但如果您想要简单,您仍然可以对值进行硬编码:

public static String roundOff(double num) {
    double acc = 20;
    String fmt = "%.2f";
    num *= acc;
    num = Math.ceil(num);
    num /= acc;
    return String.format(fmt, num);
}

最后一个注意事项:你的问题表明你想要四舍五入到"两位小数"但是,使用20作为准确性并不是很明显,因为这会将其四舍五入到1/20的下一个倍数。如果确实希望将其舍入为两位小数,则accuracy应使用的值为100

答案 2 :(得分:2)

为了做到这一点,您必须将其格式化为String。与大多数语言一样,Java将降低尾随零。

String.format("%.2f", number);

因此,您可以返回String(从双处更改返回类型),或者在需要使用上面的代码显示时将其格式化。您可以read the JavaDoc for Formatter了解小数位数,逗号位置等所有可能性。

答案 3 :(得分:1)

如果你想要一个String输出

,你可以尝试这个
double number = roundOff(1.499);//1.5

DecimalFormat decimalFormat = new DecimalFormat("#.00");
String fromattedDouble = decimalFormat.format(number);//1.50

函数roundOff与您在问题中提到的相同。