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

Flutter中如何仅对百万位进行数值取整?

取整规则实现优化

规则回顾

  • 当数值的百万位余数≥500,000时,向上取整至最近的百万整数
  • 当数值的百万位余数<500,000时,向下取整至最近的百万整数
    示例:
  • 4,843,820,000 → 余数820,000≥500,000 → 4,844,000,000
  • 1,136,362,500 → 余数362,500<500,000 → 1,136,000,000
  • 1,500,000 → 余数500,000≥500,000 → 2,000,000
  • 1,450,000 → 余数450,000<500,000 → 1,000,000

原代码问题分析

原代码存在以下问题:

  • 区间判断有遗漏(如等于99999、999999等边界值未覆盖)
  • 依赖round()的四舍五入逻辑,虽部分情况符合需求,但不如直接按规则实现直观可靠
  • 多分支重复操作,代码冗余

优化后的实现代码

String kmbGenerator(int number) {
  const int unit = 1000000;
  // 计算商和余数
  int quotient = number ~/ unit;
  int remainder = number % unit;
  
  // 按规则判断是否进位
  if (remainder >= 500000) {
    quotient += 1;
  }
  
  // 处理小于百万的情况
  if (quotient == 0) {
    return "0";
  }
  
  // 生成带千位分隔符的结果
  String result = "${quotient * unit}";
  return result.replaceAllMapped(RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (match) => "${match[1]},");
}

代码说明

  1. 统一单位处理:以1,000,000为固定单位,通过商和余数判断进位,避免多分支冗余
  2. 明确进位逻辑:直接判断余数是否≥500,000,完全贴合需求规则,无歧义
  3. 边界全覆盖:处理了所有整数场景,包括小于百万、刚好等于百万、余数等于500000等边界情况
  4. 自动格式化:用正则表达式自动添加千位分隔符,无需手动拼接字符串

测试验证

  • 输入4843820000 → 输出"4,844,000,000"
  • 输入1136362500 → 输出"1,136,000,000"
  • 输入1500000 → 输出"2,000,000"
  • 输入1450000 → 输出"1,000,000"
  • 输入499999 → 输出"0"
  • 输入500000 → 输出"1,000,000"

内容的提问来源于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.05 12:35:18