涉及到金额的为什么都要保存整数? -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

涉及到金额的为什么都要保存整数?

比如金额是100.02,那么数据库中都要求存为10002

展开
收起
蛮大人123 2016-02-25 18:34:26 3757 0
4 条回答
写回答
取消 提交回答
  • 小数容易出现精度丢失的问题,在库中保存的数字不可预料。
    2019-07-17 18:47:52
    赞同 展开评论 打赏
  • 小数容易出来精度丢失问题,例如 2.0可能会变成1.99999999999……,而使用整数则不存在这个问题。
    2019-07-17 18:47:52
    赞同 展开评论 打赏
  • 因为金额如果用double 或者 float 非整数类型,会导致丢失精度。 更往底层说:计算机底层存储是用二进制表示的。所以 整数如 7=4+2+1 而存储小数如0.7=0.5+0.125+.....你可以看到,实际上是拆不完的。 具体可以参考 浮点数的二进制表示 阮一峰的博客http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html
    2019-07-17 18:47:52
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    为什么要用整形? 用 decimal 字段类型 不行吗? 如果涉及到计算,为了尽量保持最大的精确度,可以使用PHP 的中的 BC 数学 函数。注意,目前,浮点数在计算机中应该是无法完全精确存储的,只能最大限度。除非,你从数据库读取或从外部如GET参数获取的浮点数。
    在实际的项目中,如果商品价格等 涉及到加减乘除运算时,也会按照一定约定一些规则进行取舍。 比如采用:四舍五入、向上递增、银行家舍入等等。

    2019-07-17 18:47:52
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新
相关电子书
更多
用计算和数据去改变整个世界
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载