php bcmath使用,PHP bcmath与Python Decim

经过一番实验,我终于明白了。这是舍入与截断的问题。默认情况下,Python使用ROUND_HALF_EVEN取整,而PHP只是以指定的精度截断。Python的默认精度是28,而在PHP中使用的是26。在In [57]: import decimal

In [58]: decimal.getcontext()

Out[58]: Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[InvalidOperation, Overflow, DivisionByZero])

如果您想让Python模仿PHP的截断行为,只需更改rounding属性:

^{pr2}$

让PHP的行为像Python的默认值有点困难。我们需要为除法和乘法创建一个自定义函数,它像Python一样取整“半偶数”:function bcdiv_round($first, $second, $scale = 0, $round=PHP_ROUND_HALF_EVEN)

{

return (string) round(bcdiv($first, $second, $scale+1), $scale, $round);

}

function bcmul_round($first, $second, $scale = 0, $round=PHP_ROUND_HALF_EVEN)

{

$rounded = round(bcmul($first, $second, $scale+1), $scale, $round);

return (string) bcmul('1.0', $rounded, $scale);

}

下面是一个演示:php > $a = bcdiv_round('15.80', '483.49870000', 28);

php > $b = bcmul_round($a, '483.49870000', 28);

php > var_dump($b);

string(5) "15.80"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值