Java:如何为double值设置Precision?

Kir*_*ran 86 java

我最近正在处理数字,我有一种情况,我希望将双精度值的精度设置为6位数或4位数,具体取决于数据库中存储的值.

例如,如果在数据库中精度设置为4位,则输出必须为,

10.0000.

我试过DecimalFormat并使用字符串##.####,但每次使用符号都很烦人.

有没有更好的方法,如下所示:

Double value = 10.0;
value.setPrecision(4);
Run Code Online (Sandbox Code Playgroud)

小智 254

您可以为此目的尝试BigDecimal

Double toBeTruncated = new Double("3.5789055");

Double truncatedDouble = BigDecimal.valueOf(toBeTruncated)
    .setScale(3, RoundingMode.HALF_UP)
    .doubleValue();
Run Code Online (Sandbox Code Playgroud)

  • 为什么没有人投票给这个答案它是完美的. (8认同)
  • 效果很好,可以删除“新双人” (2认同)
  • 尝试 double r1 = BigDecimal.valueOf(2.945777946674339E8D).setScale(3, RoundingMode.HALF_UP).doubleValue();--- 你得到 2.94577794667E8。输出看起来与您的要求不同。 (2认同)

小智 53

这是一种简单的方法.

String formato = String.format("%.2f");
Run Code Online (Sandbox Code Playgroud)

它将预定设置为2位数o任何.

如果你只想用这种方式打印它.

System.out.printf("%.2f",123.234);
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清:`double myDouble = 42.99; 格式化字符串 = String.format("%.2f", myDouble);` (3认同)
  • 这不会将精度设置为 2 位数字。它将数字四舍五入到 2 位精度。那不是一回事。如果您首先四舍五入的数字由于精度不够而包含错误的值,那么四舍五入将无济于事。 (2认同)

use*_*421 51

您不能将double(或Double)的精度设置为指定的十进制数,因为浮点值不具有十进制数字.他们有二进制数字.

您必须通过BigDecimal或转换为十进制基数,DecimalFormat具体取决于您稍后要对该值执行的操作.

另请参阅我对这个问题的回答,以反驳不可避免的*100/100答案.


Jay*_*tel 19

设置double值的精度DecimalFormat是很好的技巧.例如,要使用此类导入java.text.DecimalFormat并创建它的对象

double no=12.786;
DecimalFormat dec = new DecimalFormat("#0.00");
System.out.println(dec.format(no));
Run Code Online (Sandbox Code Playgroud)

因此它将在小数点后打印两位数字,它将打印12.79


小智 9

这对我有用:

public static void main(String[] s) {
        Double d = Math.PI;
        d = Double.parseDouble(String.format("%.3f", d));  // can be required precision
        System.out.println(d);
    }
Run Code Online (Sandbox Code Playgroud)