2014-01-29 52 views
0

我試圖運行一些計算以表示特定的價格(即20.30)。如何在浮點計算中控制小數位數?

我已經嘗試了Float#round方法,但是包含這些值的實例變量最終會在幾次計算後開始表示看起來像24.43418的數字。

這僅僅是我創建把一個用戶輸入一個百分比

class Fixnum 
def percentage 
    self.to_f/100 
end 
end 

的@bankroll_amount和@risk_amount值應計算到兩位小數點

class Client 

def initialize(bankroll, unit) 
    @bankroll_amount = bankroll.to_i.round(2) 
    @unit_percentage = unit.to_i.percentage 
    default_risk_amount.round(2) 
    evaluate_default_unit!.round(2) 
end 

def default_risk_amount 
    @risk_amount = @unit_percentage * @bankroll_amount 
    @risk_amount.round(2) 
end 

# simulates what an updated bankroll looks like after a win based on clients "unit" amount 
def risk_win 
    @bankroll_amount = @bankroll_amount + @risk_amount 
    @bankroll_amount.round(2) 
    evaluate_default_unit!.round(2) 
end 

# simulates what a clients updated bankroll looks like after a loss based on clients "unit" amount 
def risk_loss 
    @bankroll_amount = @bankroll_amount - @risk_amount 
    evaluate_default_unit! 
end 


def evaluate_default_unit! 
    @risk_amount = @unit_percentage * @bankroll_amount.round(2) 
end 

end 

林不知道的方法如果這與我初始化這些實例變量有什麼關係,但是@risk_amount返回正確的兩個十進制值,但是當我返回對象時,裏面的實例變量已經運行了小數。

c = Client.new 2000, 1 
<Client:0x000001018956a0 @bankroll_amount=2000.0, @unit_percentage=0.01, @risk_amount=20.0> 

c.risk_win 
=> 20.2 

當我運行c.risk_win的是,它最終會返回

c 
<Client:0x000001018956a0 @bankroll_amount=2440.3802, @unit_percentage=0.01, @risk_amount=24.4038> 

回答

1

使用number_with_precision你的浮點數的顯示格式爲2位小數:在

number_with_precision(@bankroll_amount.to_f, precision: 2) 

用法導軌控制檯:

[1] pry(main)> include ActionView::Helpers::NumberHelper 
=> Object 
[2] pry(main)> number_with_precision(2440.3802, precision: 2) 
=> "2440.38"