PHP 精点计算问题。

https://www.jianshu.com/p/1d03e80c1fa6

现在问题是系统已经有N条API。怎么样补救这样的问题?

网上看到说有使用bcmul等函数
$a = 0.58;
$b = 100;
dump($a*$b);
dd(bcmul($a,$b,2));
这样是对的,但是其实我不知道$a有几位小数的,他的精准计算需要写小数的

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
宇宙最厉害

奇进偶舍

我这边的方案是先用 BC 数学 函数 保留4位小数,然后在用 round 函数

round(bcmul($a, $b, 4), 2, PHP_ROUND_HALF_EVEN);

round

  • PHP_ROUND_HALF_UP     该模式将进行四舍六入,遇5进1
  • PHP_ROUND_HALF_DOWN   该模式将进行四舍六入,遇5不舍弃
  • PHP_ROUND_HALF_EVEN    该模式将四舍六入,整数部分为奇数则进1
  • PHP_ROUND_HALF_ODD    该模式将四舍六入,整数部分为偶数则进1

可以尝试一下

4年前 评论

可以把$a按照"."字符串分割一下 然后strlen 看有几位小数

4年前 评论
leo

不可能 100% 精确,举个最简单的例子:$result = 1 / 3; 这是个无限小数,怎么精确?所以你必须指定一个你需要的精度。

4年前 评论
半人间 (楼主) 4年前
leo (作者) 4年前
半人间 (楼主) 4年前
宇宙最厉害

奇进偶舍

我这边的方案是先用 BC 数学 函数 保留4位小数,然后在用 round 函数

round(bcmul($a, $b, 4), 2, PHP_ROUND_HALF_EVEN);

round

  • PHP_ROUND_HALF_UP     该模式将进行四舍六入,遇5进1
  • PHP_ROUND_HALF_DOWN   该模式将进行四舍六入,遇5不舍弃
  • PHP_ROUND_HALF_EVEN    该模式将四舍六入,整数部分为奇数则进1
  • PHP_ROUND_HALF_ODD    该模式将四舍六入,整数部分为偶数则进1

可以尝试一下

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!