保留小数点后三位_关于 Java 小数点位数保留的解决方案

本文介绍了Java中保留小数点位数的三种方法。一是使用DecimalFormat类,可按不同格式保留小数;二是用String.format方法,能按指定小数位数四舍五入;三是使用BigDecimal类,有四舍五入规则,小数点后均为零时保留一位小数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:RaphetS

来源:www.jianshu.com/p/00fff555986b

第一种方法

使用DecimalFormat类

举个例子,假如我们需要保留两位小数,我们可以这样写

DecimalFormat df = new DecimalFormat("0.00");

测试如下:

double d = 0.200;DecimalFormat df = new DecimalFormat("0.00");System.out.println(df.format(d));

输出结果为:
0.20

若double d=0.000;输出结果为0.00;
若double d=0;输出结果为0.00;
若double d=41.2345;输出结果为41.23;

经测试,不管double d的值为多少,最后结果都是正常的两位小数。

同理若是保留一位小数DecimalFormat df = new DecimalFormat("0.0");其他以此类推

若是这种写法DecimalFormat df = new DecimalFormat("0.00"),不管传入的任何值,均保留两位小数

还有一种写法是这样:

double d = 41.123;DecimalFormat df = new DecimalFormat("#.##");System.out.println(df.format(d));

输出结果为:
41.12

若double d=2.00,输出结果为2;
若double d=41.001,输出结果为41;
若double d=41.010,输出结果为41.01;
若double d=0,输出结果为0;
若double d=0.200,输出结果为0.2;

总结:若是这种写法DecimalFormat df = new DecimalFormat("#.##"),则保留小数点后面不为0的两位小数,这种写法不能保证保留2为小数,但能保证最后一位数不为0;

第二种方法

测试:

double d = 0.6544;String s=String.format("%.2f",d);System.out.println(s);

输出结果为:
0.65

若double d=0.6566,输出结果为0.66;
若double d=0,输出结果为0.00;

其中String s=String.format("%.2f",d)表示小数点后任意两位小数,其中2为表示两位小数,若需要三位小数,把2改为3即可,其他同理。

总结:这种方法不管传入的值是多少,均保留两位小数,并且符合四舍五入的规则。

第三种方法:

使用BigDecimal类

测试:

909fd3177e501b556aaf6e7206434af1.png

输入结果:1.0

若double d=0,输出结果为0.0;
若double d=1.999,输出结果为2.0;
若double d=1.89,输出结果为1.89;

总结:使用这种写法若小数点后均为零,则保留一位小数,并且有四舍五入的规则。

源码

以下为Java测试类

624230193770ee6eebd981b2ef3eb5fc.png
### 使用 Java 中的 `Double` 类保留小数点三位Java 中,直接使用 `Double` 类并不提供内置的方法来控制小数点后的位数。为了实现这一目标,通常会借助其他工具类如 `BigDecimal` 或者格式化工具如 `DecimalFormat` 来达到目的。 #### 方法一:使用 `BigDecimal` 通过将 `double` 值转换成 `BigDecimal` 对象,可以利用其提供的舍入模式来进行更精准的操作: ```java import java.math.BigDecimal; import java.math.RoundingMode; public class Main { public static void main(String[] args) { double value = 1.23456789; BigDecimal bd = new BigDecimal(Double.toString(value)); double roundedValue = bd.setScale(3, RoundingMode.HALF_UP).doubleValue(); System.out.println(roundedValue); } } ``` 这段代码展示了如何先将原始的双精度浮点数值转为字符串再构建 `BigDecimal` 实例[^1],从而避免可能由二进制表示带来的误差问题;接着调用 `setScale()` 函数指定位数以及采用何种方式处理多余的小数部分,在这里是选择了四舍五入的方式(`RoundingMode.HALF_UP`)。 #### 方法二:使用 `DecimalFormat` 另一种常见的做法是应用 `DecimalFormat` 类来进行格式化的输出: ```java import java.text.DecimalFormat; public class Main { public static void main(String[] args) { DecimalFormat df = new DecimalFormat("#.###"); double value = 1.23456789; String formattedString = df.format(value); System.out.println(formattedString); try{ // 如果需要再次作为数字使用,则需解析回double型 double parsedValue = Double.parseDouble(df.format(value)); System.out.println(parsedValue); } catch (NumberFormatException e){ e.printStackTrace(); } } } ``` 这里定义了一个具有特定模式 (`#.###`) 的 `DecimalFormat` 对象用于格式化给定的 `value` 变量,并将其结果打印出来。需要注意的是,如果后续还需要对该值做进一步计算的话,应该考虑重新解析返回来的字符串形式的数据[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值