php随机浮点数_php浮点数高精度计算库

namespace JYH\Utils\Models;

class Currency {

public function __construct(int $scale = 6) {

bcscale($scale);

}

//设置保留的位数

public function setScale(int $scale) : bool {

return bcscale($scale);

}

//加法

public function add(array $list, $scale = null) : string {

if(empty($list)) {

return 0;

}

$total = 0;

foreach($list as $item) {

$total = bcadd($total, $item, $scale);

}

return $total;

}

//减法

public function sub(string $left, string $right, $scale = null) : string {

return bcsub($left, $right, $scale);

}

//乘法

public function mul(string $left, string $right, $scale = null) : string {

return bcmul($left, $right, $scale);

}

//除法

public function div(string $left, string $right, $scale = null) : string {

return bcdiv($left, $right, $scale);

}

public function ceil(string $number) : string {

if ($number[0] != '-')

{

return bcadd($number, 1, 0);

}

return bcsub($number, 0, 0);

}

public function floor(string $number) : string {

if ($number[0] != '-') {

return bcadd($number, 0, 0);

}

return bcsub($number, 1, 0);

}

public function round(string $number, int $precision = 0) : string {

if ($number[0] != '-') {

return bcadd($number, '0.' . str_repeat('0', $precision) . '5', $precision);

}

return bcsub($number, '0.' . str_repeat('0', $precision) . '5', $precision);

}

public function number_format(string $number, int $decimals = 0) : string {

$item = $this->round($number, $decimals);

//切割数字和小数点部分

$sepList = explode(".", $item);

$float = "";

$integer = array_shift($sepList);

if(count($sepList) > 0) {

$float = implode("", $sepList);

}

$len = strlen($integer);

if($len <= 3){

return $item;

}

$newNumber = preg_replace_callback("/(\d{1,3})(?=(\d{3})+(?:$|\D))/", "self::merge_number", $integer);

return $newNumber . "." . $float;

}

private function merge_number(array $matches) {

return $matches[1].",";

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值