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

Swift中String(format: "%.1f", 8.25)未返回预期8.3而是8.2的疑问

String(format:) 四舍五入行为的原因解析

这是完全符合预期的行为,根源在于Swift的String(format:)底层复用了C语言printf的格式化逻辑,采用的是银行家舍入法(四舍六入五成双),而非我们日常习惯的"四舍五入"规则。

银行家舍入的核心规则

  • 当舍去位的数字是5,且5后面没有非零数字时,会将保留位调整为偶数;
  • 如果舍去位是5且后面存在非零数字,则按正常逻辑进位。

对应你的例子拆解

  • 对于8.25:保留1位小数时,舍去位是5,且5之后没有其他非零数字。此时看保留位的最后一位是2(偶数),所以不进位,最终格式化结果为8.2。
  • 对于8.251:舍去位是5,但后面跟着非零数字1,触发正常进位逻辑,保留位的2升级为3,结果就是8.3。

补充说明:8.25本身是可以用二进制浮点数精确表示的Double值,但这里的格式化结果只由舍入规则决定,和浮点数的存储精度无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:06:15