首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP和楼层到最近的100,带四舍五入

PHP和楼层到最近的100,带四舍五入
EN

Stack Overflow用户
提问于 2015-08-25 11:55:55
回答 2查看 3K关注 0票数 1

我有两个不同的功能,天花板和地板,这将发挥或地板的给定号码,以指定的数字在功能。职能如下:

代码语言:javascript
复制
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;
}}

根据上述职能,结果如下:

代码语言:javascript
复制
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。

代码语言:javascript
复制
$rate = 0.7268;
$res = $rate * 1234;
$res = ceiling($res, 100); // result : 900

在将其舍入最接近的100之后,上述结果将为900。

现在,在代码的另一部分中,我可以访问结果900、汇率0.7268和舍入值(在我们的例子中是100 )。是否有可能得到初始值1234作为答案。

我猜这必须使用地板功能,但我无法安静地使它工作。

这就是我尝试过的:

代码语言:javascript
复制
$final = $res * (1 / $rate);
$final = flooring($final, 100); // result : 1200 which is wrong.

正确的答案是1234。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-08-25 12:52:47

首先,flooring()函数不执行与ceiling()函数相反的操作,例如serialize()unserialize()函数。它在相反的方向做同样的事情。

但是,即使您有一个unceiling()函数,它也无法确定它应该返回的x00和x99之间的值。

结论:不可能起作用。

票数 2
EN

Stack Overflow用户

发布于 2015-08-25 12:15:53

从我的评论:我不认为这将是我所能知道的。当你周旋某物时,它的本质就是消除它的精确性。这意味着当你逆转这一过程时,你将无法获得‘恢复’的准确性。

替代

如果您有一个用于金钱的类,那么您可以很容易地拥有一个函数。从我的头顶上:

代码语言:javascript
复制
class Money{
    public $amount;

    function ceiled(){
        return ceiling($this->amount, 100); 
    }
}

这意味着,在您的代码中,您仍然可以在需要的地方复制$amount,但是每当您需要向用户显示该数字的“上限”版本时,您只需要将其作为一次性的。

代码语言:javascript
复制
<?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();

因此,您从不将上限金额保存为变量,只需将其显示给用户,而代码中存在一个更准确的变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32203359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档