如何在Java中将double加两位小数?

这是我做了两倍到两位小数的位置:

amount = roundTwoDecimals(amount); public double roundTwoDecimals(double d) { DecimalFormat twoDForm = new DecimalFormat("#.##"); return Double.valueOf(twoDForm.format(d)); } 

如果金额= 25.3569或类似的东西,这个效果很好,但如果金额= 25.00或金额= 25.0,那么我得到25.0! 我想要的是舍入以及格式化到2位小数。

你在用钱吗? 创build一个String ,然后将其转换回来很漂亮。

使用BigDecimal 。 这已经有相当广泛的讨论。 你应该有一个Money类,金额应该是一个BigDecimal

即使你没有使用金钱,也要考虑BigDecimal

只要使用:(一样容易)

 double number = 651.5176515121351; number = Math.round(number * 100); number = number/100; 

输出将是651.52

使用数字占位符( 0 ),与“ # ”尾随/前导零显示为不存在一样:

 DecimalFormat twoDForm = new DecimalFormat("#.00"); 

由于双打没有小数位,所以你不能将一个double加到[任意数量]的小数位上。 您可以将double转换为base-10具有N位小数的string,因为base-10确实有小数位,但是当您将其转换回来时,您将返回双精度位置。

这是我能做到的最简单的事情,但是比起大多数例子来说,这样的工作要容易得多。

  double total = 1.4563; total = Math.round(total * 100); System.out.println(total / 100); 

结果是1.46。

你可以使用apache常用的org.apache.commons.math.util.MathUtils

double round = MathUtils.round(double1, 2, BigDecimal.ROUND_HALF_DOWN);

用这个

String.format(“%。2f”,doubleValue)//根据您的要求更改2。

你可以使用Apache Commons Math:

 Precision.round(double x, int scale) 

来源: http : //commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/util/Precision.html#round(double,%20int)

您的Money类可以表示为Long的子类,或者有一个代表货币价值的成员为本地长。 然后,当为您的货币实例化指定值时,您将始终存储实际为实际货币值的值。 您只需使用适当的格式输出您的Money对象(通过Money的重写的toString()方法)。 例如,Money对象的内部表示中的$ 1.25就是125.您将货币表示为美分,或便士,或者您正密封货币的最小面额,然后将其格式化为输出格式。 不,你不能存储“非法”货币价值,比如说1.257美元。

双倍数= 25.00;

NumberFormat formatter = new DecimalFormat(“#0.00”);

的System.out.println(formatter.format(量));

 DecimalFormat df = new DecimalFormat("###.##"); double total = Double.valueOf(val); 

如果你想得到两位小数的结果,你可以做

 // assuming you want to round to Infinity. double tip = (long) (amount * percent + 0.5) / 100.0; 

这个结果是不准确的,但是Double.toString(double)将会为此更正并打印一到两个小数位。 但是,只要您执行另一个计算,您可以得到一个不会被隐式舍入的结果。 ;)

Math.round是一个答案,

 public class Util { public static Double formatDouble(Double valueToFormat) { long rounded = Math.round(valueToFormat*100); return rounded/100.0; } } 

在Spock中进行testing,Groovy

 void "test double format"(){ given: Double performance = 0.6666666666666666 when: Double formattedPerformance = Util.formatDouble(performance) println "######################## formatted ######################### => ${formattedPerformance}" then: 0.67 == formattedPerformance } 

假定金额可以是正数也可以是负数,四舍五入到小数点后两位可以使用下面的一段代码片段。

 amount = roundTwoDecimals(amount); public double roundTwoDecimals(double d) { if (d < 0) d -= 0.005; else if (d > 0) d += 0.005; return (double)((long)(d * 100.0))/100); } 

从Java 1.8开始,你可以使用lambdaexpression式来检查更多的空值。 此外,下面的一个可以处理浮点数或双精度浮点数(包括2 :-))。

 public static Double round(Number src, int decimalPlaces) { return Optional.ofNullable(src) .map(Number::doubleValue) .map(BigDecimal::new) .map(dbl -> dbl.setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP)) .map(BigDecimal::doubleValue) .orElse(null); } 

其中num是双数

  • 整数2表示我们要打印的小数位数。
  • 在这里,我们正在采取2十进制palces

    System.out.printf( “%2F”,NUM);

你可以试试这个:

 public static String getRoundedValue(Double value, String format) { DecimalFormat df; if(format == null) df = new DecimalFormat("#.00"); else df = new DecimalFormat(format); return df.format(value); } 

要么

 public static double roundDoubleValue(double value, int places) { if (places < 0) throw new IllegalArgumentException(); long factor = (long) Math.pow(10, places); value = value * factor; long tmp = Math.round(value); return (double) tmp / factor; } 

这是一个简单的方法,保证输出myFixedNumber四舍五入到小数点后两位:

 import java.text.DecimalFormat; public class TwoDecimalPlaces { static double myFixedNumber = 98765.4321; public static void main(String[] args) { System.out.println(new DecimalFormat("0.00").format(myFixedNumber)); } } 

其结果是: 98765.43

  int i = 180; int j = 1; double div= ((double)(j*100)/i); DecimalFormat df = new DecimalFormat("#.00"); // simple way to format till any deciaml points System.out.println(div); System.out.println(df.format(div)); 

首先声明一个DecimalFormat类的对象。 请注意, DecimalFormat的参数是#.00 ,意思是精确到小数点后两位。

 private static DecimalFormat df2 = new DecimalFormat("#.00"); 

现在,将这个格式应用于你的double值:

 double input = 32.123456; System.out.println("double : " + df2.format(input)); // Output: 32.12 

注意double input = 32.1;

那么输出将是32.10等等。