You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JAVA中如何将double变量截断保留两位小数后赋值给其他变量

Java实现double保留两位小数且不四舍五入的方案

下面给出3种常见实现方式,按需选择即可:

1. 数学计算法(简单场景可用)

通过先乘100取整再除以100实现截断,注意适配正负值:

double original = 3.4586748547;
// 正数用floor向下取整,负数用ceil向上取整才能保证是截断而不是进一位
double result = original < 0 ? Math.ceil(original * 100) / 100 : Math.floor(original * 100) / 100;
System.out.println(result); // 输出3.45

注意:该方法依赖double的运算,部分特殊数值会出现精度丢失问题,比如0.07乘100可能得到6.999999999999999,对精度要求高的场景不推荐使用。

2. BigDecimal实现(生产环境推荐)

用Java自带的高精度运算类BigDecimal,指定截断规则即可,稳定性最高:

import java.math.BigDecimal;
import java.math.RoundingMode;

double original = 3.4586748547;
BigDecimal decimal = BigDecimal.valueOf(original);
// setScale第一个参数是保留小数位数,第二个参数RoundingMode.DOWN表示直接截断不四舍五入
decimal = decimal.setScale(2, RoundingMode.DOWN);
double result = decimal.doubleValue();
System.out.println(result); // 输出3.45

优势:完全规避了double的精度问题,RoundingMode.DOWN规则明确就是直接丢弃多余小数,不会出现边界错误。

3. 字符串截取法(不推荐,仅作参考)

把数值转成字符串后截取小数点后两位再转回double,代码如下:

double original = 3.4586748547;
String numStr = String.valueOf(original);
int dotPos = numStr.indexOf(".");
if (dotPos != -1 && numStr.length() > dotPos + 2) {
    numStr = numStr.substring(0, dotPos + 3);
}
double result = Double.parseDouble(numStr);
System.out.println(result); // 输出3.45

缺陷:如果数值过大/过小会用科学计数法表示,此时截取会直接报错,仅适合数值范围固定、不会出现科学计数法的场景。

内容的提问来源于stack exchange,提问作者EnanSaysHi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:57:02