2012-08-02 48 views
11

Đây là mã của tôiLàm thế nào để hiển thị đầu ra với hai chữ số chính xác

class Atm 

    attr_accessor :amount, :rem, :balance 

    TAX = 0.50 

    def transaction 

    @rem = @balance=2000.00 
    @amount = gets.chomp.to_f 

    if @amount%5 != 0 || @balance < @amount 
     "Incorrect Withdrawal Amount(not multiple of 5) or you don't have enough balance" 
    else 
     @rem = @balance-(@amount+TAX) 
     "Successful Transaction" 
    end 
    end 
end 

a=Atm.new 
puts "Enter amount for transaction" 
puts a.transaction 
puts "Your balance is #{a.rem.to_f}" 

và đầu ra của tôi là

Enter amount for transaction 
100        # user enters this value 
Successful Transaction 
Your balance is 1899.5 

như bạn có thể nhìn thấy đầu ra, 'Số dư là 1899,5' chỉ hiển thị một chữ số chính xác. Tôi cần trợ giúp để hiểu và khắc phục vấn đề. Tôi muốn hai chữ số chính xác trong đầu ra.

Và tôi cũng có thể cải thiện mã này bằng cách nào?

Trả lời

21

Bạn có thể sử dụng này:

puts "Your balance is #{'%.02f' % a.rem}" 

Nhưng hãy nhớ rằng mã này sẽ làm tròn kết quả của bạn nếu bạn có nhiều hơn 2 chữ số thập phân. Ví dụ: 199.789 sẽ trở thành 199.79.

+0

Cảm ơn bạn MurifoX, tôi cũng muốn biết liệu tôi có thể cải thiện mã của mình bằng bất kỳ cách nào không? loại bỏ bất kỳ mã không cần thiết hoặc bất cứ điều gì như thế? –

+0

Mã của bạn tốt. Chỉ cần tách logic thành các phần nhỏ của mã để người khác có thể hiểu nó tốt hơn. Hãy nhớ rằng nếu câu trả lời là hữu ích, bạn luôn có thể chấp nhận nó để giúp đỡ người khác. – MurifoX

+0

Dấu "0" đứng đầu ở phía trước "2" có ý nghĩa đặc biệt ở đây không? – sschuberth

6
number_with_precision(value, :precision => 2) 

nên làm việc trong Rails

+0

Xin chào! Anthony, tôi chưa lên đường ray, vừa mới bắt đầu học ruby ​​nhưng tôi đánh giá cao phản hồi của bạn, sẽ nhớ mã này. –

9

Đó là lỗi thiết kế cơ bản để lưu trữ tiền dưới dạng số dấu phẩy động vì nổi không chính xác. Tiền phải luôn được lưu trữ dưới dạng số nguyên trong đơn vị tiền tệ nhỏ nhất.

Hãy tưởng tượng hai tài khoản có 1.005. Hiển thị cả hai, và đột nhiên có thêm một xu trên thế giới.

Thay vì lưu trữ số tiền trong một số nguyên. Ví dụ: $ 1 sẽ là balance = 100 hoặc 100 xu. Sau đó, định dạng giá trị được hiển thị:

money = 1000 
"%.2f" % (money/100.0) 
# => 10.00 
+1

Nó có ý nghĩa, tôi chắc chắn sẽ nhớ điều này. Cảm ơn bạn rất nhiều vì đã chia sẻ kiến ​​thức của bạn với tôi. –

+0

tôi có thể chuyển đổi nó thành phao mà không làm mất 2 số không ở cuối – user4965201

+0

@ user4965201 không có ý nghĩa gì. Một phao là một số, và chúng ta có thể đồng ý 5.0 và 5.00 là cùng một số. Khi bạn hiển thị 5.0 trên một trang web, bạn cần phải chuyển đổi từ số thành chuỗi, vì một số là một khái niệm trừu tượng và cần được truyền đạt thông qua ngôn ngữ của con người, trong trường hợp này là văn bản. – AJcodez

Các vấn đề liên quan