如何在Java中将double类型保留两位小数
在Java开发中,我们常常需要将double类型的数值保留两位小数,本文将介绍几种常见的方法,并提供相应的代码示例。
方法1: 使用String.format()
double dou = 3.14789;
String douStr = String.format("%.2f", dou);
System.out.println("douStr:" + douStr);
注:
- 该方法会进行四舍五入,并且位数不够时会用0补齐。
方法2: 使用BigDecimal
double dou = 3.14789;
BigDecimal bigDecimal = new BigDecimal(dou).setScale(2, BigDecimal.ROUND_DOWN);
double newDouble = bigDecimal.doubleValue();
System.out.println("newDouble:" + newDouble);
注:
BigDecimal.ROUND_UP
表示四舍五入,BigDecimal.ROUND_DOWN
表示直接舍弃保留位数之后的小数。- 位数不够时,不会补齐。
方法3: 使用NumberFormat
double dou = 3.14789;
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(2);
numberFormat.setRoundingMode(RoundingMode.DOWN);
String douStr2 = numberFormat.format(dou);
System.out.println("douStr2:" + douStr2);
注:
RoundingMode.UP
表示四舍五入,RoundingMode.DOWN
表示直接舍弃保留位数之后的小数。NumberFormat
不指定RoundingMode
时,默认为四舍五入。- 位数不够时,不会补齐。
方法4: 使用DecimalFormat
double dou = 3.14789;
DecimalFormat df = new DecimalFormat("#.00");
String formatted = df.format(dou);
System.out.println("formatted:" + formatted);
注:
- 该方法会进行四舍五入,并且位数不够时会用0补齐。
测试代码
package com.test;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class DoubleTest {
/**
* 保留两位小数,四舍五入的一个简单方法
* @param d
* @return
*/
public static double formatDouble1(double d) {
return (double)Math.round(d * 100) / 100;
}
/**
* 使用BigDecimal进行保留两位小数
* @param d
* @return
*/
public static double formatDouble2(double d) {
BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
return bg.doubleValue();
}
/**
* 使用NumberFormat进行保留两位小数
* @param d
* @return
*/
public static String formatDouble3(double d) {
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
nf.setRoundingMode(RoundingMode.UP);
return nf.format(d);
}
/**
* 使用DecimalFormat进行保留两位小数
* @param d
* @return
*/
public static String formatDouble4(double d) {
DecimalFormat df = new DecimalFormat("#.00");
return df.format(d);
}
/**
* 使用String.format进行保留两位小数
* @param d
* @return
*/
public static String formatDouble5(double d) {
return String.format("%.2f", d);
}
public static void main(String[] args) {
double d = 12345.67890;
System.out.println(formatDouble1(d));
System.out.println(formatDouble2(d));
System.out.println(formatDouble3(d));
System.out.println(formatDouble4(d));
System.out.println(formatDouble5(d));
}
}
输出
12345.68
12345.68
12,345.68
12345.68
12345.68
总结
以上方法各有优缺点,选择哪种方法取决于具体需求:
- 如果需要简单的四舍五入并且输出格式化字符串,可以使用
String.format
或DecimalFormat
。 - 如果需要更精确的数值运算和舍入控制,建议使用
BigDecimal
。 NumberFormat
适合需要国际化和 locale 支持的场景。
希望本文能帮助你更好地处理Java中的数值格式化问题。