我认为这很容易,但我在这里遗漏了一些东西。我正在使用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始终是一个整数,没有小数并四舍五入到最接近的整数?
答案 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)
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将变量实例化为哪种数据类型。