我有两个不同的功能天花板和地板,它们将给定数字的ceil或floor落到函数中指定的数字。功能如下:
function ceiling($number, $significance) {
if ($significance != null) {
return (is_numeric($number) && is_numeric($significance) ) ? (ceil($number / $significance) * $significance) : $number;
} else {
return $number;
}}
function flooring($number, $significance) {
if ($significance != null) {
return (is_numeric($number) && is_numeric($significance) ) ? (floor($number / $significance) * $significance) : $number;
} else {
return $number;
}}
使用上述功能,结果如下:
echo ceiling(125, 100); // 200
echo ceiling(2785, 1000); // 3000
echo flooring(125, 100); // 100
echo flooring(2785, 1000); // 2000
问题陈述:
我有一个特定的数字,1234,它将乘以汇率,即0.7268。这将生成一个特定的数字,但必须使用天花板函数将其四舍五入到最接近的100,其显着性为100.
$rate = 0.7268;
$res = $rate * 1234;
$res = ceiling($res, 100); // result : 900
将其四舍五入到最近的100后,上述结果将为900。
现在在代码的不同部分,我可以访问结果900,汇率0.7268和用于舍入的值,在我们的情况下为100。是否可以将初始值1234作为答案。
我猜这必须以某种方式使用地板功能,但我无法安静使其工作。
这就是我的尝试:
$final = $res * (1 / $rate);
$final = flooring($final, 100); // result : 1200 which is wrong.
对此的正确答案是1234。
感谢。
答案 0 :(得分:2)
首先,您的flooring()
函数与ceiling()
函数没有相反的作用,例如serialize()
和unserialize()
。它在相反的方向做同样的事情。
但即使你有一个unceiling()
函数,它也无法确定它应该返回x00和x99之间的值。
结论:这不可行。
答案 1 :(得分:1)
从我的评论中:我不认为它会尽我所能。当你圆形的东西,就其本质而言,你正在从中去除它的精确度。这意味着,当你颠倒过程时,你将无法获得准确性'返回'
<强>替代强>
如果你有一个班级用于赚钱,那么你可以轻松拥有一个功能。在我的头顶:
class Money{
public $amount;
function ceiled(){
return ceiling($this->amount, 100);
}
}
这意味着在您的代码中,您仍然可以执行诸如将金额乘以您需要的任何内容之类的事情,但无论何时您需要向用户显示“贪图”。这个数字的版本,你只要求它作为一个关闭,即
<?php
$money = new Money();
$money->amount = 1234;
echo "Current amount is roughly " . $money->ceiled();
// apply exchange rate
$money->amount *= 0.7268;
echo "New amount is roughly " . $money->ceiled();
因此,您永远不会将天花板数量保存为变量,只需在代码中存在更准确的变量时将其显示给用户。