mysql decimal php,PHP中的MySQL DECIMAL处理

如通常讨论的那样(例如Storing 0.00001 in MySQL),DECIMAL数据类型应用于需要精确度/正确性的字段,例如帐户余额.

但是,我想知道PHP如何处理这些值,以及如果它们在内部以浮点数进行处理,那么从数据库读取这些值,进行一些计算并再次写回它们时是否仍然存在问题.如果是这样,我们如何才能迫使PHP保持精度?

解决方法:

该变量可能是最初在PHP中的字符串(从MySQL结果对象读取时).通常,不能依靠PHP的浮点数据类型来保持所需的精确十进制值.您应该使用像GMP这样的任意精度的数学库.(当获取结果对象的一行时,将DECIMAL列值传递给适当的构造函数,然后使用所使用的库提供的函数对其进行操作. )

要更深入:假设您有一个存储在数据库DECIMAL(6,4)列中的金额.您想将其提取到PHP中,以对其进行处理.您发出查询以获取该列.您将查询的第一行提取到关联数组中.假设该行的值为2.5674.您的数组现在类似于array(‘MyDecimal’=>’2.5674’)(数字显示为字符串).您(据我所知)使用gmp_init()将该字符串转换为GMP资源.现在,您可以使用其他GMP功能使用该数字进行数学运算.如果要存储GMP编号,则可以使用gmp_strval()将其转换回字符串(如果您正在使用可以处理GMP资源的数据库抽象层,则不必这样做).

标签:floating-point,precision,decimal,mysql,php

来源: https://codeday.me/bug/20191101/1986489.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值