货币数字输入开发避坑:精度、格式、校验一次说透
写财务系统十几年,"货币数字输入"这五个字看着不起眼货币数字输入开发避坑:精度、格式、校验一次说透,真要做扎实,能把你折磨够呛。小数精度、千分位格式、负数校验,每一处都能埋雷。
最头疼的是格式。用户习惯输"1,234.56"带千分位逗号,也有人直接敲"1234.56"。货币符号放前面还是后面?¥还是CNY还是RMB?不同地区规则完全不一样。输入框如果不做容错,光一个逗号就能让后端解析炸掉。

更隐蔽的是浮点数。0.1加0.2等于0.30000000000000004,这在银行对账里就是事故。永远别用浮点存金额,用整数分或者BigDecimal货币数字输入,从数据库到展示层全链路统一,否则日终对账差一分钱都得查三天。
退款和冲正场景会把负数搞进来。用户退120块但原单只有100,允不允许?部分退款后余额为零要不要关闭订单?四舍五入还是银行家舍入?尾差归谁?这些规则不提前定死,上线就是扯皮。
实际项目里我养成了一个习惯:前端限制只能输数字和小数点,最多两位小数;后端收到值立刻校验范围,负数单独走退款通道;展示层统一加千分位,但存值不带任何符号。把格式和数值彻底分开,能省掉后面八成bug。
