银行家算法 php 例子,PHP使用round()四舍六入实现银行家算法

Round()函数不能简单的翻译为四舍五入。具体来说,我们从小学习的“四舍五入”是不科学的。国际通行的是 Banker 舍入法(Banker ‘s rounding,银行家舍入)算法,顾名思义,就是银行在计算时使用的规则,即“四舍六入五取偶”。就是说小于 4 或大于 6 的该舍该入是没有争议的,而5处在正中间,采取的原则是:如果舍入位为5,则舍入后最后一位为偶数。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一规则的。这就解释了为什么 2.5 舍入以后以后是 2,而 3.5 舍入以后是 4。

摘自PHP官方文档.http://php.net/manual/zh/function.round.php

(PHP 4, PHP 5, PHP 7)

round — 对浮点数进行四舍五入

说明

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )

返回将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)。

Note: PHP 默认不能正确处理类似 “12,300.2” 的字符串。见字符串转换为数值。

参数

val

要处理的值

precision

可选的十进制小数点后数字的数目。

mode

以下之一: PHP_ROUND_HALF_UP、 PHP_ROUND_HALF_DOWN PHP_ROUND_HALF_EVEN 或 PHP_ROUND_HALF_ODD

返回值

四舍五入后的值

round函数可以接受1-3个参数.其中第1个参数为浮点值,第2个参数为保留小数点后的位数,第3个参数为模式.其中第2和第3个参数为可选项.

Notice:round()函数不可以处理字符串类型,在处理前请转换为数值.

Notice:第2个参数不填写则默认为0,此时只返回四舍五入后的整数部分.

function test(){

echo 'round(9.5, 0, PHP_ROUND_HALF_UP)='.round(9.5, 0, PHP_ROUND_HALF_UP)."
"; // 10

echo 'round(9.5, 0, PHP_ROUND_HALF_DOWN)='.round(9.5, 0, PHP_ROUND_HALF_DOWN)."
"; // 9

echo 'round(9.5, 0, PHP_ROUND_HALF_EVEN)='.round(9.5, 0, PHP_ROUND_HALF_EVEN)."
"; // 10

echo 'round(9.5, 0, PHP_ROUND_HALF_ODD)='.round(9.5, 0, PHP_ROUND_HALF_ODD)."
"; // 9

echo 'round(8.5, 0, PHP_ROUND_HALF_UP)='.round(8.5, 0, PHP_ROUND_HALF_UP)."
"; // 9

echo 'round(8.5, 0, PHP_ROUND_HALF_DOWN)='.round(8.5, 0, PHP_ROUND_HALF_DOWN)."
"; // 8

echo 'round(8.5, 0, PHP_ROUND_HALF_EVEN)='.round(8.5, 0, PHP_ROUND_HALF_EVEN)."
"; // 8

echo 'round(8.5, 0, PHP_ROUND_HALF_ODD)='.round(8.5, 0, PHP_ROUND_HALF_ODD)."
"; // 9

}

1

2

3

4

5

6

7

8

9

10

11

functiontest(){

echo'round(9.5, 0, PHP_ROUND_HALF_UP)='.round(9.5,0,PHP_ROUND_HALF_UP)."
";// 10

echo'round(9.5, 0, PHP_ROUND_HALF_DOWN)='.round(9.5,0,PHP_ROUND_HALF_DOWN)."
";// 9

echo'round(9.5, 0, PHP_ROUND_HALF_EVEN)='.round(9.5,0,PHP_ROUND_HALF_EVEN)."
";// 10

echo'round(9.5, 0, PHP_ROUND_HALF_ODD)='.round(9.5,0,PHP_ROUND_HALF_ODD)."
";// 9

echo'round(8.5, 0, PHP_ROUND_HALF_UP)='.round(8.5,0,PHP_ROUND_HALF_UP)."
";// 9

echo'round(8.5, 0, PHP_ROUND_HALF_DOWN)='.round(8.5,0,PHP_ROUND_HALF_DOWN)."
";// 8

echo'round(8.5, 0, PHP_ROUND_HALF_EVEN)='.round(8.5,0,PHP_ROUND_HALF_EVEN)."
";// 8

echo'round(8.5, 0, PHP_ROUND_HALF_ODD)='.round(8.5,0,PHP_ROUND_HALF_ODD)."
";// 9

}

PHP_ROUND_HALF_UP:    该模式将进行四舍六入,遇5进1

PHP_ROUND_HALF_DOWN:  该模式将进行四舍六入,遇5不舍弃

PHP_ROUND_HALF_EVEN:    该模式将四舍六入,整数部分为奇数则进1

PHP_ROUND_HALF_ODD:   该模式将四舍六入,整数部分为偶数则进1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值