Câu hỏi đặt ra cho Python 2.6, đó là những gì chúng tôi có trong quá trình sản xuất.Cách định dạng số bằng dấu phẩy và các chữ số chính xác được chỉ định trong Python
Tôi có yêu cầu này để định dạng một số (như 1234567.0987 hoặc 1234567.0) bằng dấu phẩy và số chữ số được chỉ định sau dấu thập phân. Vì vậy, nếu độ chính xác là ba, 1234567.0987 có thể trông giống như 1,234,567.099.
Tôi đã thử sử dụng Locale, như được đề xuất bằng câu trả lời cho nhiều câu hỏi, vấn đề là kết quả bằng hai chữ số sau dấu thập phân, không được chấp nhận theo yêu cầu của tôi.
tôi đã cố gắng tìm kiếm ở những nơi khác, nhưng không tìm thấy bất kỳ giải pháp, và cuối cùng tôi đã tạo ra một phương pháp bằng cách riêng của tôi:
def format_float(value, precision = 4):
formatString = "%0." + str(precision) + "f"
str_val = formatString % value
first, second = str_val.split('.')
first = int(first)
group = []
while True:
result, mod = first/1000, first % 1000
group.append(str(mod))
if result == 0:
break
first = result
group.reverse()
return ','.join(group) + '.' + second
Tôi cố gắng để chạy một số xét nghiệm để kiểm tra phương pháp này và nó hoạt động tốt :
# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == '0.0000'
# 3 digits precision
assert format_float(1234567890.0876543, precision=3) == '1,234,567,890.088'
assert format_float(0, precision=3) == '0.000'
Mới sử dụng Python, câu hỏi của tôi là đây có phải là giải pháp có thể chấp nhận hay không. Vì định dạng này phải được thực hiện nhiều lần trong một vòng lặp chặt chẽ, tôi sẽ đánh giá cao nếu ai đó có thể trỏ đến một giải pháp tốt hơn.
Cảm ơn và chúc cho tất cả
Hãy thử với '1000000'. –
Đánh dấu, Cảm ơn bạn. Đó là một lỗi tốt ngay tại đó, tôi cần phải sửa lỗi này. – cspider
Bạn không phải sử dụng mô-đun 'locale'. Xem câu trả lời của tôi cho câu hỏi [Cách nào dễ nhất để thêm dấu phẩy vào một số nguyên trong Python? _] (Http://stackoverflow.com/q/3909457/355230). – martineau