Đối với một số điều khiển máy trong Python, tôi viết kết quả vào tệp văn bản, rằng người khác có thể sao chép vào Excel [đây là cách thuận tiện nhất trong tình huống này]. Tuy nhiên, ở Hà Lan, Excel có dấu phẩy là dấu phân cách thập phân và do đó tôi muốn có kết quả "vị trí" trong tệp văn bản là 123.456, nhưng khi tôi sử dụng phương pháp F-String như thế này:
resultfile.write[f"Position\t{position:.5}"]
Điều này rõ ràng sẽ dẫn đến một dấu phân cách thập phân chấm.
Làm thế nào tôi có thể thay đổi điều này thành dấu phẩy mà không lặp lại toàn bộ tệp int cuối cùng và thay thế các dấu chấm bằng dấu phẩy?
Đã hỏi ngày 27 tháng 3 năm 2019 lúc 14:30Mar 27, 2019 at 14:30
2
Nếu bạn muốn định dạng nổi với dấu phẩy trong chuỗi F, bạn có thể sử dụng thay thế sau khi đúc phao vào một chuỗi:
position = 123.456
f"Position\t{str[position].replace['.',',']}"
Tùy chọn thứ hai là sử dụng Locale mô-đun thư viện tiêu chuẩn Python [nhưng nó không an toàn cho luồng]:
import locale
locale.setlocale[locale.LC_ALL, 'nl_NL']
f"Position\t{locale.format['%.3f', position]}"
Tùy chọn thứ ba là sử dụng thư viện Babel [ưa thích trong trường hợp thói quen thư viện]:
from babel.numbers import format_decimal
f"Position\t{format_decimal[position, locale='nl_NL']}"
Tất cả ba tùy chọn trả về cùng một kết quả cho ví dụ đã cho:
'Position\t123,456'
Đã trả lời ngày 14 tháng 6 năm 2019 lúc 9:43Jun 14, 2019 at 9:43
Kadeekadeekadee
7,2681 Huy hiệu vàng 38 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge38 silver badges30 bronze badges
Như @michel-de-ruiter đã đề cập, định dạng
position = 123.456
f"Position\t{str[position].replace['.',',']}"
0 không hoạt động với Locale. Mặt khác, bạn không thể đặt độ chính xác bằng định dạng position = 123.456
f"Position\t{str[position].replace['.',',']}"
1. Ví dụ: nếu bạn muốn 4 chữ số sau khi phân tách thập phân:import locale
locale.setlocale[locale.LC_ALL, 'nl_NL']
position = 123.45678999
print[f'{position:.4n}'] # output: 123,4 [not quite what we wanted!]
Tuy nhiên, bạn có thể làm tròn số với độ chính xác mong muốn trước khi định dạng nó:
print[f'{round[position, 4]:n}'] # output: 123,4567 [that's it!]
Đã trả lời ngày 9 tháng 2 năm 2021 lúc 20:59Feb 9, 2021 at 20:59
BaumanbaumannBaumann
1.07111 huy hiệu bạc20 Huy hiệu đồng11 silver badges20 bronze badges
Nếu bạn muốn tránh các phụ thuộc, hàm đơn giản sau đây có thể phù hợp với nhu cầu của bạn:
def comma_num[n,f='']:
return ['{'+f+'}'].format[n].replace['.',',']
n = 1.23
f'Whatever {comma_num[n]}'
'Whatever {}'.format[comma_num[n]]
>>>'Whatever 1,23'
f'Whatever {comma_num[n,":6.4f"]}'
'Whatever {}'.format[comma_num[n,':6.4f']]
>>>'Whatever 1,2300'
Đã trả lời ngày 5 tháng 3 lúc 14:06Mar 5 at 14:06
MMJMMJmmj
5.2312 Huy hiệu vàng41 Huy hiệu bạc49 Huy hiệu đồng2 gold badges41 silver badges49 bronze badges
Nếu định dạng
position = 123.456
f"Position\t{str[position].replace['.',',']}"
2 đủ tốt cho bạn, hãy sử dụng position = 123.456
f"Position\t{str[position].replace['.',',']}"
1 thay thế:resultfile.write[f"Position\t{position:.7n}"]
Trong khi
position = 123.456
f"Position\t{str[position].replace['.',',']}"
1 hoạt động [sử dụng cài đặt địa phương hiện tại khi được sử dụng] thay vì cả position = 123.456
f"Position\t{str[position].replace['.',',']}"
5 và position = 123.456
f"Position\t{str[position].replace['.',',']}"
2, không có điều gì như vậy cho định dạng position = 123.456
f"Position\t{str[position].replace['.',',']}"
0 thật không may ...Đã trả lời ngày 17 tháng 12 năm 2020 lúc 10:47Dec 17, 2020 at 10:47
Michel de Ruitermichel de RuiterMichel de Ruiter
6.4885 Huy hiệu vàng 50 Huy hiệu bạc67 Huy hiệu Đồng5 gold badges50 silver badges67 bronze badges
Một giải pháp đơn giản hơn có thể là:
f"Position\t{position:,.5f}"
Đã trả lời ngày 8 tháng 6 năm 2019 lúc 1:53Jun 8, 2019 at 1:53
2