112

Tôi có một số điểm nổi, nói 135.12345678910. Tôi muốn nối giá trị đó thành một chuỗi, nhưng chỉ muốn 135.123456789. Với in ấn, tôi có thể dễ dàng làm điều này bằng cách làm một cái gì đó như:

print "%.9f" % numvar

với numvarsố gốc của tôi Có cách nào làm dễ hơn không?

|
135

Với Python <3 (ví dụ 2.6 [xem bình luận] hoặc 2.7), có hai cách để làm như vậy.

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

Nhưng lưu ý rằng đối với các phiên bản Python trên 3 (ví dụ: 3.2 hoặc 3.3), tùy chọn hai được ưu tiên .

Để biết thêm thông tin về tùy chọn hai, tôi đề nghị liên kết này về định dạng chuỗi từ tài liệu Python .

Và để biết thêm thông tin về tùy chọn một, liên kết này sẽ đủ và có thông tin về các cờ khác nhau .

Python 3.6 (được phát hành chính thức vào tháng 12 năm 2016), đã thêm fchuỗi ký tự, xem thêm thông tin ở đây , mở rộng str.formatphương thức (sử dụng dấu ngoặc nhọn để f"{numvar:.9f}"giải quyết vấn đề ban đầu), nghĩa là

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

giải quyết vấn đề Kiểm tra câu trả lời của @ Or-Duan để biết thêm thông tin, nhưng phương pháp này nhanh .

|
41

Con trăn 3.6 | 2017

Để làm cho nó rõ ràng, bạn có thể sử dụng định dạng chuỗi f . Điều này có cú pháp gần như giống với formatphương thức, nhưng làm cho nó đẹp hơn một chút.

Thí dụ:

print(f'{numvar:.9f}')

Đọc thêm về chuỗi f mới:

|
36

Sử dụng round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
|
7

Nó không in định dạng, đó là thuộc tính của chuỗi, vì vậy bạn chỉ có thể sử dụng

newstring = "%.9f" % numvar
|
6

Trong trường hợp độ chính xác không được biết cho đến khi thực thi, tùy chọn định dạng khác này hữu ích:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
|
  • 1

    Nếu bạn muốn sử dụng .format-method, lưu ý rằng điều này cũng có thể được thực hiện bằng cách lồng các đối số như vậy : '{:.{n}f}'.format(numvar,n=n).

    – Lý Nghi Dung 20:42:52 29/10/2018
2

Để đặt độ chính xác với 9 chữ số, hãy lấy:

print "%.9f" % numvar

Trả về độ chính xác với 2 chữ số:

print "%.2f" % numvar 

Trả về độ chính xác với 2 chữ số và giá trị chuyển đổi float:

numvar = 4.2345
print float("%.2f" % numvar) 
|
1

Các strchức năng có một lỗi. Hãy thử như sau. Bạn sẽ thấy '0,196553' nhưng đầu ra bên phải là '0,196554'. Bởi vì strgiá trị mặc định của hàm là ROUND_HALF_UP.

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.