关于浮点数四舍五入的问题

我使用 round 函数进行浮点数约数时,发现其行为似乎和我的预期不相符合。如:round(17.955, 2) 返回 17.95 而不是 17.96。为了得到预期的结果,我必须再加 0.0001 才能进位。请问这是怎么回事?应该如何处理该数据以达到我预期的结果?



请先 登录 后评论

1 个回答

veryOrdinary

这个是由于浮点数的精度问题导致的,17.955 在二进制里只能保存为17.954999999999998,所以 round 只能返回17.95。可以考虑将其转换为 DECIMAL 类型,再使用 round 进行规约,如:round(19.955$DECIMAL32(3), 2)

相关参考资料:DECIMAL 使用教程

请先 登录 后评论
  • 1 关注
  • 0 收藏,598 浏览
  • Polly 提出于 2023-04-17 09:23

相似问题