带小数点四舍五入的 PHP 浮点数

Posted

技术标签:

【中文标题】带小数点四舍五入的 PHP 浮点数【英文标题】:PHP float number with decimal point rounding 【发布时间】:2015-09-02 10:04:43 【问题描述】:

我正在计算几个数字(sales_total、service_charge)以获得 7% 的 GST。我得到的是带小数点的数字。

示例 1:

$sales_total        = 207.50;
$service_charge = 20.75;

$gst                = ($sales + $sc) * .07;

退回给我 GST =15.9775

示例 2:

$sales_total        = 28;
$service_charge = 2.8;
$gst                =  ($sales + $sc) * .07;

退回我 GST = 2.156

我需要将数据与

示例 1 GST = 16.00 (我的 15.9775) 示例 2 GST = 2.15 (我的 2.156)

我正在尝试使用 php roundnumber_format 函数,但我的两个结果都没有正确。 round 给出的示例 1 结果正确,number_format 给出的示例 2 正确。

我做错了什么,或者我需要使用哪个功能?

【问题讨论】:

我猜($sales + $sc) 应该是($sales + $service_charge) 根据您的示例,PHP 为您提供数学上正确的数字。此外,每个示例之间的舍入规则似乎不同。我很想说,鉴于提供的信息表明报告是狡猾的...... @CD001 你是对的..但这不是问题..它只是我分享的伪代码.. 扩展不同的规则。您似乎希望示例 2 将 向下 舍入到最接近的第 100 位,但对于示例 1,您希望它将 向上 舍入到最接近的整数。 @JonStirling 可以证明你是正确的。我从中获取数据的 api 是用 Java 完成的。这可能是转换差异还是他们正在做自己的机制来获得差异? 【参考方案1】:

我相信您可能需要使用远离零的精确小数位四舍五入,因此取决于您可以使用:

$gst = sprintf("%.2f", round($gst, 3 - strlen(round($gst)), PHP_ROUND_HALF_ODD));

结果:

16.00
2.16

这显示了 3 位小数的精度,从零减去舍入值的长度。您可能需要使用舍入模式和精度来获得您想要的结果。来自2.1562.15 的结果看起来不正确——不清楚你是如何得到这个值的。

PHP_ROUND_HALF_UP • 将 val 舍入到远离零的精确小数位,当它是一半时。把 1.5 变成 2 和 -1.5 变成 -2。

PHP_ROUND_HALF_DOWN • 将 val 向下舍入到接近零的精度小数位,当它是一半时。将 1.5 变为 1 和 -1.5 变为 -1。

PHP_ROUND_HALF_EVEN • 将 val 舍入到精确到下一个偶数值的小数位。

PHP_ROUND_HALF_ODD • 将 val 四舍五入到下一个奇数值的小数位。

参考:http://php.net/manual/en/function.round.php

【讨论】:

【参考方案2】:

你试过了吗:

round($gst, 2);

这会将您的变量四舍五入到小数点后 2 位。

你可以试试吗?

编辑

由于您希望两种价值观都有不同的行为,我认为这一轮在这两种情况下都不能帮助您。 实际上第二个例子你甚至不想要一轮。你只是想删除第 3 个小数,所以......

在这种情况下,我将使用第一个示例,如我所说的带有 2 个小数点的房子,在第二个示例中,我将删除数据库中的第 3 个数字或限制>将浮点数表为 2 个小数点的房子。

【讨论】:

我试过了.. 示例 1:15.98(预计 16.00)和示例 2:2.16(预计 2.15)

以上是关于带小数点四舍五入的 PHP 浮点数的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??

c语言中浮点数四舍五入 。 保留一个浮点数小数点后的6位,第3位要四舍五入。如 1.1234.567到1234.570000

C语言,一个浮点数,怎么四舍五入保留到个位数

C语言中如何对浮点数进行四舍五入?

请问java提供啥方法实现将一个浮点数,四舍五入只保留小数点后两位

浮点数四舍五入到小数点后两位