带有小数点舍入的PHP浮点数

时间:2015-09-02 10:04:44

标签: php floating-point number-formatting

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

示例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正确。

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

2 个答案:

答案 0 :(得分:0)

你试过了吗?

round($gst, 2);

这会将你的变量在2个小数的房子里。

你能试试吗?

修改

由于你想要在两个值中都有不同的行为,我不认为这一轮可以在两种情况下帮助你。 实际上第二个例子你甚至不想要一轮。你只想删除第三个十进制数,所以......

在这种情况下,我会使用第一个例子,如我所说的那样,带有2个小数的房子的轮次,在第二个例子中,我只是删除数据库中的第3个房屋号码或限制>表格将浮动数量减去2个小数的房子。

答案 1 :(得分:0)

我相信你可能需要使用精确小数位数从零开始舍入,所以根据你可以使用:

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

结果:

16.00
2.16

这表示距离零的3位小数的精度减去舍入值的长度。您可能需要使用舍入模式和精度来获得它想要的效果。来自2.15的{​​{1}}的结果看起来不正确 - 目前还不清楚你是如何得到这个价值的。

  
      
  • PHP_ROUND_HALF_UP •舍入精确的小数位数,远离零,当它在那里的一半时。使1.5成2   和-1.5到-2。

  •   
  • PHP_ROUND_HALF_DOWN •将val向下舍入到精确小数位,朝向零,当它在那一半时。使1.5成1和   -1.5进-1。

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

  •   
  • PHP_ROUND_HALF_ODD •将val舍入到精确小数位,朝向下一个奇数值。

  •   

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