在Java中定义双精度的小数位数

时间:2015-03-08 17:00:27

标签: java double

我有一个愚蠢的问题。

假设我有一定的双数:

double doubleValue=4.1;

有没有办法将此值显示为4.10,但为String,而是为double?

4 个答案:

答案 0 :(得分:3)

如果要打印两位小数,请执行以下操作:

double d = 4.10;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));

这将打印4.10,数字为双

这是一个完整的工作示例,您可以编译并运行以打印4.10:

import java.text.DecimalFormat;

class twoDecimals {
    public static void main(String[] args) {
double d = 4.10;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));
}
}

即使你设置了

double d = 4.1;

它会打印4.10

如果设置double d = 4;,它将打印4.00,这意味着始终打印两个小数点

答案 1 :(得分:2)

只需这样做,

double doubleValue=4.1;

String.format(Locale.ROOT, "%.2f", doubleValue );

输出:

4.10

使用这种方法,您不需要使用DecimalFormat,这也会减少不必要的导入

答案 2 :(得分:0)

您无法定义数据类型double的精度。 如果需要定义十进制数的精度,可以使用类BigDecimal。 正如javadoc所解释的那样,BigDecimal用于任意精度的带符号十进制数。 这是参考文献

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

答案 3 :(得分:0)

我不明白为什么你想要小数点后2位数的双号,0填补空白。你打算在某个地方展示它吗?

答案是,不,你不能

实际上,如果之后没有任何0,你可以设置双精度。

前 -

4.10000 // and you want to set the precision to 2 digits
// it will still give you 4.1 not 4.10

if it is 4.1 // and you want to set precision to 3 digits
// it will still give you 4.1 not 4.100

if it is 4.1234565 // and you want to set precision to 3 digits,
// it will give you 4.123

即使使用String.format格式化它并将其更改回十进制或使用BigDecimal的setScale方法来设置精度, 你不能得到一个以小数后的0结尾的双精度值。

如果要在某处显示某些小数,可以通过转换为String来实现。

这里有两种方法可以做到这一点,(设置精度但不会在最后设置0来填补空白)

1

int numberOfDigitsAfterDecimal = 2;
double yourDoubleResult = 4.1000000000;
Double resultToBeShown = new BigDecimal(yourDoubleResult).setScale(numberOfDigitsAfterDecimal, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(resultToBeShown);

2

double doubleValue=4.1;
double newValue = Double.parseDouble(String.format( "%.2f", doubleValue ));
System.out.println(newValue);

将4.10作为字符串,

double doubleValue=4.1;
String newValue = String.format( "%.2f", doubleValue );
System.out.println(newValue);