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
相关产品推荐
相关产品推荐

