2014-01-29 7 views
0

저는 특정 가격 (즉, 20.30)을 나타 내기 위해 몇 가지 계산을 실행하려고합니다.플로트 계산에서 십진수를 어떻게 제어합니까?

플로트 # 라운드 메서드를 사용해 보았지만 이러한 값을 보유하고있는 인스턴스 변수는 결국 몇 가지 계산을 거쳐 24.43418과 같은 숫자를 나타내기 시작합니다.

내가 @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 

임 확실하지으로 평가해야 백분율

class Fixnum 
def percentage 
    self.to_f/100 
end 
end 

에 사용자 입력을 설정하기 위해 만든 다만 방법이다 이 인스턴스 변수를 초기화하고 있다는 사실과 관련이 있지만 @risk_amount가 올바른 두 십진수 값을 반환하지만 객체를 반환하면 내부의 인스턴스 변수에 소수가 실행됩니다. 에서

number_with_precision(@bankroll_amount.to_f, precision: 2) 

사용법 : 내가 충분히 c.risk_win 실행하면

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

c.risk_win 
=> 20.2 

은, 결국 2 소수점으로 부동 소수점 숫자의 표시 형식을

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

답변

1

사용 number_with_precision을 반환 레일 콘솔 :

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