2013-10-29 33 views
4

我想將一個數字加到下一個季度(即2.1輪到2.25)。據我所知,我可以通過使用Math.Round(num * 4)/4獲得最接近的一個季度,但我想對此進行擴展,以便它總是在下一季度完成。四捨五入到下一季

到目前爲止,我唯一的解決方案是使用if塊,但是我想首先耗盡單線算法的方法來儘量保持簡單。

這在技術上與語言無關,但在這種情況下,我使用的是C#。

要清楚,下面是我想要的例子:如2.0

  • 2.01

    • 2.0住宿 - 2.24四捨五入到2.25
    • 2.25住宿2.25
    • 2.26 - 2.49圓高達2.5
    • 等等......
  • 回答

    5

    這樣的事情呢?

    return Math.Ceiling(x * 4)/4; 
    

    下面是一個解釋。假設你想四捨五入到最接近的整數。這很簡單 - 這正是Math.Ceiling所做的。 OK,所以我們已經有了一個算法,它具有我們想要的行爲。這只是錯誤的常數。

    我們可以解決這個由「映射」我們的投入,每一個「季度」的思想爲映射到一個整體(這將正確地代表0.25的倍數):

    0.25 => 1 
    0.50 => 2 
    0.75 => 3 
    1.00 => 4 
    1.25 => 5 
    

    & C,& C。

    這裏的映射關係很簡單。從左到右,乘以4.從右到左,除以4.注意每個值> = 0.25 < 0.5將映射到1和2之間的某個值,這是我們想要的,因爲Math.Ceiling將四捨五入到2在這種情況下,我們可以將其映射回0.5。因此,我們基本上將輸入映射到一個與已經實現的算法(Math.Ceiling)一起使用的值;那麼我們將結果映射回我們輸入來自的一組值。

    有意義嗎?

    +0

    是非常合情合理的,不知道爲什麼我不能認爲這更早,只是「那些日子之一」我猜。由於有很好的解釋,將其標記爲答案,儘管其他兩個答案也是正確的。 – Tony

    5

    您可以使用:

    Math.Ceiling(num * 4)/4.0; 
    
    3

    只是這樣做:

    Math.Ceiling(num * 4)/4.0;