double四舍五入并保留两位小数的方法

本文介绍了几种在Java中实现浮点数输出的方法,包括使用System.out.println结合String.format进行格式化输出,利用Math.round进行数值舍入,通过DecimalFormat定制显示格式,运用Double.parseDouble配合String.format精确控制输出,以及采用BigDecimal进行高精度算术运算并设置小数位数。
1.只要输出结果
1
2
double x1 = 0.026;
System.out.println(String.format("%.2f", x1));


2.数据转换
1
2
3
4
5
6
7
8
9
10
11
//方案一:
get_double = (double)(Math.round(result_value*100)/100.0)
//方案二:
DecimalFormat df = new DecimalFormat("#.##");
get_double = Double.ParseDouble(df.format(result_value));
//方案三:
get_double = Double.ParseDouble(String.format("%.2f",result_value));
//方案四:
BigDecimal bd = new BigDecimalresult_value();
BigDecimal bd2 = bd.setScale(2,BigDecimal .ROUND_HALF_UP);
get_double = Double.ParseDouble(bd2.ToString());


3.只保留两位小数(不含四舍五入)
1
2
double d = 13.4324;
d=((int)(d*100))/100;
在 Java 中,`double` 类型是双精度浮点数,常用于表示带小数的数值。当我们需要对 `double` 值进行**四舍五入保留两位小数**时,有多种方法可以实现。下面详细介绍几种常用、推荐的方式,解释其优缺点。 --- ### ✅ 方法一:使用 `BigDecimal`(推荐,最精确) ```java import java.math.BigDecimal; import java.math.RoundingMode; public class Main { public static void main(String[] args) { double value = 3.1415926; BigDecimal bd = new BigDecimal(Double.toString(value)) .setScale(2, RoundingMode.HALF_UP); double rounded = bd.doubleValue(); System.out.println(rounded); // 输出: 3.14 } } ``` #### 🔍 解释: - `Double.toString(value)`:避免直接传 `double` 构造 `BigDecimal` 出现精度问题。 - `.setScale(2, RoundingMode.HALF_UP)`:设置保留 2 位小数,且采用“四舍五入”规则。 - `RoundingMode.HALF_UP`:这是最常见的四舍五入模式(如 0.005 → 0.01)。 - ⚠️ 不要用 `new BigDecimal(double)` 直接构造,会有精度误差! > ✅ **优点**:精确、安全、适合金融计算 > ❌ **缺点**:代码稍多 --- ### ✅ 方法二:使用 `String.format()` 或 `System.out.printf` ```java public class Main { public static void main(String[] args) { double value = 3.1415926; String formatted = String.format("%.2f", value); double rounded = Double.parseDouble(formatted); System.out.println(formatted); // 输出字符串: 3.14 System.out.println(rounded); // 输出 double: 3.14 } } ``` #### 🔍 解释: - `"%.2f"` 表示格式化为保留两位小数的浮点数。 - 返回的是字符串,如果要转回 `double`,需用 `Double.parseDouble()`。 > ✅ **优点**:简洁、易读 > ❌ **缺点**:中间经过字符串转换,性能略低;不适合高精度场景 --- ### ✅ 方法三:使用 `Math.round()` ```java public class Main { public static void main(String[] args) { double value = 3.1415926; double rounded = Math.round(value * 100.0) / 100.0; System.out.println(rounded); // 输出: 3.14 } } ``` #### 🔍 解释: - 将数值乘以 100,变成整数位; - 使用 `Math.round()` 四舍五入到最近的整数; - 再除以 100.0 得到保留两位小数的结果。 > ✅ **优点**:无需导入类,简单快速 > ❌ **缺点**:由于浮点数精度问题,在某些边界值上可能不准确(如 `2.225` 可能变成 `2.22` 而非 `2.23`) --- ### ✅ 方法四:使用 `DecimalFormat` ```java import java.text.DecimalFormat; public class Main { public static void main(String[] args) { double value = 3.1415926; DecimalFormat df = new DecimalFormat("0.00"); // 保证至少一位整数,两位小数 df.setRoundingMode(RoundingMode.HALF_UP); String result = df.format(value); double rounded = Double.parseDouble(result); System.out.println(result); // 输出字符串: 3.14 System.out.println(rounded); // 输出 double: 3.14 } } ``` #### 🔍 解释: - `"0.00"`:格式模板,表示整数部分最少一位,小数部分固定两位。 - `setRoundingMode(RoundingMode.HALF_UP)`:启用四舍五入。 - 适合输出或展示场景。 > ✅ **优点**:可定制格式(如添加千分位) > ❌ **缺点**:返回字符串,需再解析成 double --- ### 🧪 对比测试一个容易出错的例子:`2.225` | 方法 | 结果 | 是否正确 | |------|------|---------| | `BigDecimal` | `2.23` | ✅ 正确 | | `Math.round(x*100)/100` | `2.22` or `2.23`? 取决于精度 | ⚠️ 可能错误 | | `String.format` | `2.23` | ✅ 正确 | | `DecimalFormat` | `2.23` | ✅ 正确 | 👉 所以对于要求严格的场景(如财务),应优先使用 `BigDecimal`。 --- ### ✅ 推荐封装工具方法 ```java public static double roundToTwoPlaces(double value) { return new BigDecimal(Double.toString(value)) .setScale(2, RoundingMode.HALF_UP) .doubleValue(); } ``` 使用: ```java double result = roundToTwoPlaces(3.14159); // 3.14 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值