Sau khi tìm cách giải quyết vấn đề này, không tải bất kỳ mô-đun Python 3 hoặc các phép toán thêm nào, tôi giải quyết vấn đề bằng cách sử dụng chỉ str.format() e .float().Tôi nghĩ cách này nhanh hơn việc sử dụng các phép toán khác, như trong giải pháp commom nhất. Tôi cần một giải pháp nhanh vì tôi làm việc với một tập dữ liệu rất lớn và vì vậy nó hoạt động rất tốt ở đây.
def truncate_number(f_number, n_decimals):
strFormNum = "{0:." + str(n_decimals+5) + "f}"
trunc_num = float(strFormNum.format(f_number)[:-5])
return(trunc_num)
# Testing the 'trunc_num()' function
test_num = 1150/252
[(idx, truncate_number(test_num, idx)) for idx in range(0, 20)]
Nó trả về kết quả như sau:
[(0, 4.0),
(1, 4.5),
(2, 4.56),
(3, 4.563),
(4, 4.5634),
(5, 4.56349),
(6, 4.563492),
(7, 4.563492),
(8, 4.56349206),
(9, 4.563492063),
(10, 4.5634920634),
(11, 4.56349206349),
(12, 4.563492063492),
(13, 4.563492063492),
(14, 4.56349206349206),
(15, 4.563492063492063),
(16, 4.563492063492063),
(17, 4.563492063492063),
(18, 4.563492063492063),
(19, 4.563492063492063)]
Không có giá trị như vậy trong tập đó được đại diện bởi số dấu chấm động. –
Trong trường hợp nhận xét của Karl không đủ rõ ràng: Có * không có số * như 1324343032.324 trong dấu phẩy động nhị phân. Nếu bạn chuyển sang phiên bản cao hơn của Python (2.7 hoặc 3.1 trở lên), thông dịch viên sẽ * hiển thị * 1324343032.324 cho bạn. Nhưng trong thực tế, số bạn đang tính toán không phải là 1324343032.324 cũng như 1324343032.3239999 bất kể phiên bản Python. Cách duy nhất để có được * chính xác * 1324343032.324 là sử dụng mô-đun 'thập phân 'hoặc một số thư viện toán học tùy ý khác, chẳng hạn như' gmpy'. –
Câu trả lời được chấp nhận bên dưới là chính xác, nếu bạn muốn làm tròn (lên) đến một số chữ số thập phân nhất định. Tuy nhiên, câu hỏi đặt ra là gì, và những gì tôi muốn biết, là làm thế nào để cắt ngắn đến một số vị trí thập phân cụ thể. Đối với tôi, ''% .3f'% (1324343032.3243)' và ''% .3f'% (1324343032.3245)' cho kết quả khác nhau. (Tôi đang sử dụng Python 2.7.8). – nullstellensatz