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

截断经过Math.Round处理后的double类型值是否安全?

Math.Round转int的隐藏陷阱

搞过.NET开发的朋友大概率踩过这个坑:Math.Round(myDouble)返回的是double类型,但因为double的精度天生有限,它给出的结果未必是严格的整数值——有时候会略大于目标整数,有时候又会略小于。

咱们分两种情况拆解:

  • 当返回值略大于目标整数时,强制转int是安全的:比如Math.Round(19.5)可能会返回20.0000000000002,这时候用(int)强制转换,会直接截断小数部分,得到20,和预期完全一致。
  • 但如果返回值略小于目标整数,强制转int就危险了:举个例子,假设某个数值经过四舍五入后应该是10,但实际返回的是9.999999999999998,这时候(int)转换会直接把它变成9,完全偏离了正确结果。

所以千万别想当然地认为Math.Round的结果转int就万无一失,得留意这个精度带来的隐形坑!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:55:01