Sử dụng Python 2.7 làm cách nào để làm tròn các số của tôi thành hai chữ số thập phân thay vì 10 hoặc lâu hơn?
print "financial return of outcome 1 =","$"+str(out1)
Sử dụng Python 2.7 làm cách nào để làm tròn các số của tôi thành hai chữ số thập phân thay vì 10 hoặc lâu hơn?
print "financial return of outcome 1 =","$"+str(out1)
Câu trả lời:
Sử dụng chức năng tích hợp round()
:
>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68
Hoặc chức năng tích hợp format()
:
>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'
Hoặc định dạng chuỗi kiểu mới:
>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'
Hoặc định dạng chuỗi kiểu cũ:
>>> "%.2f" % (1.679)
'1.68'
giúp đỡ về round
:
>>> print round.__doc__
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
Decimal("{:.2f}".format(val))
Decimal(format(val, '.2f'))
.
Decimal('123.345').quantize(Decimal('1.00'), rounding=decimal.ROUND_HALF_UP)
cho bạn Decimal('123.35')
. Mặt khác, Decimal(format(Decimal('123.345'), '.2f'))
cho bạn Decimal('123.34')
vì biểu diễn nhị phân của 123.345 nhỏ hơn 123.345.
Vì bạn đang nói về các số liệu tài chính , bạn KHÔNG MUỐN sử dụng số học dấu phẩy động. Bạn nên sử dụng Decimal.
>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')
Định dạng đầu ra văn bản với kiểu mới format()
(mặc định là làm tròn nửa chẵn):
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52
Xem sự khác biệt trong làm tròn do không chính xác dấu phẩy động:
>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2) # This converts back to float (wrong)
33.51
>>> Decimal(33.505) # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')
Cách thích hợp để làm tròn giá trị tài chính :
>>> Decimal("33.505").quantize(Decimal("0.01")) # Half-even rounding by default
Decimal('33.50')
Cũng thường có các loại làm tròn khác trong các giao dịch khác nhau:
>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')
Hãy nhớ rằng nếu bạn đang mô phỏng kết quả trả lại, bạn có thể sẽ phải làm tròn ở mỗi kỳ tính lãi, vì bạn không thể trả / nhận phân số xu, cũng như không thể nhận lãi theo phân số xu. Đối với các mô phỏng, việc sử dụng dấu phẩy động khá phổ biến do sự không chắc chắn cố hữu, nhưng nếu làm như vậy, hãy luôn nhớ rằng lỗi là ở đó. Do đó, ngay cả các khoản đầu tư có lãi suất cố định cũng có thể khác một chút về lợi nhuận vì điều này.
Bạn cũng có thể sử dụng str.format()
:
>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
Khi làm việc với đồng xu / số nguyên. Bạn sẽ gặp sự cố với 115 (như $ 1,15) và các số khác.
Tôi đã có một chức năng sẽ chuyển đổi một Số nguyên thành một Pha nổi.
...
return float(115 * 0.01)
Nó hoạt động hầu hết thời gian nhưng đôi khi nó sẽ trả lại một cái gì đó như thế nào 1.1500000000000001
.
Vì vậy, tôi đã thay đổi chức năng của mình để trả về như thế này ...
...
return float(format(115 * 0.01, '.2f'))
và điều đó sẽ trở lại 1.15
. Không '1.15'
hoặc 1.1500000000000001
(trả về một số thực, không phải một chuỗi)
Tôi chủ yếu đăng bài này để tôi có thể nhớ những gì tôi đã làm trong trường hợp này vì đây là kết quả đầu tiên trên google.
Tôi nghĩ tốt nhất là sử dụng hàm format () :
>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60
Nhưng tôi phải nói rằng: không sử dụng vòng hoặc định dạng khi làm việc với các giá trị tài chính.
format
yêu cầu không phải chuỗi cho định dạng f. Nếu không, bạn có một ValueError. Mã đúng là: format(out1, '.2f')
không đúc chuỗi
Khi chúng ta sử dụng hàm round (), nó sẽ không cho giá trị chính xác.
bạn có thể kiểm tra nó bằng cách sử dụng vòng (2.735) và vòng (2.725)
hãy sử dụng
import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
Một cách giải quyết khá đơn giản là chuyển float thành chuỗi trước, chọn chuỗi con của bốn số đầu tiên, cuối cùng chuyển đổi chuỗi con trở lại float. Ví dụ:
>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1
Có thể không quá hiệu quả nhưng đơn giản và hoạt động :)
Decimal
s, tùy thuộc vào những gì bạn đang thực sự cố gắng thực hiện.