2015-08-25 40 views
0

我有兩種不同的功能天花板和地板,它們會將給定的數字設置爲在功能中指定的數量。功能如下:PHP Ceil和樓到精舍的精確到100

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

感謝。

+4

我不認爲它會盡我所知。當你圍繞一些東西時,就其本質而言,你正在消除它的精確性。這意味着,當你逆轉這個過程時,你將無法獲得準確的'回'。 – Djave

+0

這是一個肯定的答案.. –

回答

1

從我的評論:我不認爲它會盡我所知。當你圍繞一些東西時,就其本質而言,你正在消除它的精確性。這意味着,當你逆轉這個過程時,你將無法獲得準確的'回'。

替代

如果您正在使用的錢一類,那麼你可以輕鬆擁有的功能。關閉我的頭頂:

class Money{ 
    public $amount; 

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

這意味着,在你的代碼,你仍然可以做這樣的事情乘以$量你需要的地方,但是當你需要向用戶顯示一個「ceiled」版本數量,你只要求它作爲一個一次性即

<?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(); 

所以你從來沒有ceiled量保存爲變量,而更準確的變量在你的代碼存在,它只是顯示給用戶。

2

首先,您的flooring()函數不會做與ceiling()函數相反的功能,例如serialize()unserialize()。它在相反的方向做同樣的事情。

但即使你有一個unceiling()函數,它也無法確定它應該返回的x00和x99之間的值。

結論:這不可能工作。