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

Flutter中如何对百万级数值取整?示例:29,971,800转30,000,000

实现数值按百万位四舍五入并格式化的方法

针对你提出的需求——将29971800.0取整为30,000,000、356740000取整为357,000,000,核心是先把数值四舍五入到百万位,再用带千分位分隔符的格式输出。以下是几种可行的Java实现方案:

方案1:手动缩放数值+普通格式化

先通过数学运算将数值四舍五入到百万位,再用NumberFormat生成带千分位的字符串:

import java.text.NumberFormat;
import java.math.RoundingMode;

public class RoundingDemo {
    public static void main(String[] args) {
        // 示例数值
        double num1 = 29971800.0;
        long num2 = 356740000;

        // 四舍五入到百万位:先除以1e6取整,再乘以1e6还原
        long roundedNum1 = Math.round(num1 / 1000000) * 1000000;
        long roundedNum2 = Math.round(num2 / 1000000) * 1000000;

        // 创建格式化器,设置无小数位+千分位分隔
        NumberFormat formatter = NumberFormat.getNumberInstance();
        formatter.setMaximumFractionDigits(0);
        formatter.setRoundingMode(RoundingMode.HALF_UP);

        // 输出结果
        System.out.println(formatter.format(roundedNum1)); // 30,000,000
        System.out.println(formatter.format(roundedNum2)); // 357,000,000
    }
}

方案2:使用DecimalFormat特殊模式

利用DecimalFormat的模式语法,直接指定取整到百万位并格式化:

import java.text.DecimalFormat;
import java.math.RoundingMode;

public class RoundingDemo {
    public static void main(String[] args) {
        double num1 = 29971800.0;
        long num2 = 356740000;

        // 模式中的第二个逗号表示将数值除以1,000,000(百万),同时保留千分位分隔
        DecimalFormat formatter = new DecimalFormat("#,###,,");
        formatter.setRoundingMode(RoundingMode.HALF_UP); // 启用四舍五入

        System.out.println(formatter.format(num1)); // 30,000,000
        System.out.println(formatter.format(num2)); // 357,000,000
    }
}

方案3:BigDecimal精确处理(适合高精度场景)

如果需要避免浮点数精度问题,用BigDecimal做精确的四舍五入:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;

public class RoundingDemo {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("29971800.0");
        BigDecimal num2 = new BigDecimal("356740000");
        BigDecimal million = new BigDecimal("1000000");

        // 四舍五入到百万位:除以百万后取整,再乘以百万还原
        BigDecimal roundedNum1 = num1.divide(million, 0, RoundingMode.HALF_UP).multiply(million);
        BigDecimal roundedNum2 = num2.divide(million, 0, RoundingMode.HALF_UP).multiply(million);

        NumberFormat formatter = NumberFormat.getNumberInstance();
        System.out.println(formatter.format(roundedNum1)); // 30,000,000
        System.out.println(formatter.format(roundedNum2)); // 357,000,000
    }
}

三种方案都能实现需求,可根据场景选择:

  • 方案1逻辑直观,适合基础场景;
  • 方案2代码简洁,利用格式化语法直接完成;
  • 方案3精度最高,适合涉及高精度计算的业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:40:28