舍入到最接近的整数PHP

时间:2017-07-10 21:44:02

标签: php

我认为这很容易,但我在这里遗漏了一些东西。我正在使用Stripe Connect并尝试计算申请费(以美分计)。问题是我的申请费有时会有小数,所以它会引发错误。我已经尝试使用round()给我和ceil(),但我仍然得到一个小数,并在我的答案中尾随零,所以它返回一个错误。

$payment =  bcmul($request->amount, 100); //112.00 - Convert to cents for stripe becomes 11200
$applicationFee = $payment * 0.021; //235.2 but should be just 235
print_r($applicationFee); //Should be whole number, round and ceil still provide me with decimal number IE 235.0 instead of 235

如何确保applicationFee始终是一个整数,没有小数并四舍五入到最接近的整数?

4 个答案:

答案 0 :(得分:1)

round()应该做的伎俩

$applicationFee = round($payment * 0.021);

您可以添加更多参数以进行舍入,因此允许在结果中显示一些小数。

你说你试过了,但我不知道如何。

请注意 21是一些国家的增值税百分比(税)。小心你如何围绕这些数字,因为税务局可能是严格的

问题:根据文档round()返回一个浮点数,因为它也可以舍入到1或更多小数。但是如果省略第二个参数,你应该得到一个整数。浮点数等于235.0如何影响脚本的其余部分?

答案 1 :(得分:1)

这应该有效! (使用round()函数)

文档:Round()

$payment = bcmul($request->amount, 100);
$applicationFee = $payment * 0.021;
print_r(round($applicationFee));

答案 2 :(得分:1)

docs for ceil

中所述,您是正确的
  

ceil()的返回值仍然是float

类型

方法说明还告诉您返回一个浮点数:

  

float ceil(float $ value)

round()的返回类型也显示为docs for round中的浮点数,如下所示:

  

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

您可以使用intval()代替如下:

intval($applicationFee);

或者尝试转换为int,如下所示:

(int) $applicationFee

如果你想保留你的细胞或四舍五入,你可以先调用它们,然后按如下方式进行投射:

intval(ceil($applicationFee));
(int) ceil($applicationFee);

答案 3 :(得分:1)

当您没有具体说明时,Php会自动分配数据类型。为此,您必须分配一个数据类型,以便您进行正在尝试的计算。

确保您为它们提供足够的空间进行计算。

然后作为最后一步,将其调整到您想要的精度并将其打印出来。

如果你让PHP选择你想要的数据类型,那是非常不可能的。您必须仔细选择PHP将变量实例化为哪种数据类型。