2012-11-13 44 views
7

Làm cách nào để tôi có thể yêu cầu python đọc số thập phân bằng cách sử dụng dấu phẩy hoặc dấu phẩy làm dấu phân cách thập phân? Tôi không biết các thiết lập nội địa hóa của máy tính sẽ chạy kịch bản của tôi, và điều này không nên ảnh hưởng đến ứng dụng của tôi, tôi chỉ muốn nói:Chuyển đổi chuỗi Python thành phao một cách rõ ràng bằng dấu phẩy hoặc điểm như dấu phân cách

f = read_float_with_point("3.14") 

hoặc

f = read_float_with_comma("3,14") 

Tôi nghĩ rằng viết

def read_float_with_comma(num): 
    return float(num.replace(",", ".") 

không an toàn vì tôi không biết cài đặt ngôn ngữ!

+0

'1.000': một hoặc một nghìn là gì? – katrielalex

+1

@katrielalex: chính xác, điều đó phụ thuộc vào ngôn ngữ. –

Trả lời

9

bởi vì tôi không biết cài đặt ngôn ngữ

Bạn có thể nhìn thấy bằng cách sử dụng các locale module:

>>> locale.nl_langinfo(locale.RADIXCHAR) 
'.' 

hoặc

>>> locale.localeconv()['decimal_point'] 
'.' 

dùng đó, mã của bạn có thể trở thành:

import locale 
_locale_radix = locale.localeconv()['decimal_point'] 

def read_float_with_comma(num): 
    if _locale_radix != '.': 
     num = num.replace(_locale_radix, ".") 
    return float(num) 

Vẫn còn tốt hơn, cùng một module có chức năng chuyển đổi cho bạn, được gọi là atof():

import locale 

def read_float_with_comma(num): 
    return locale.atof(num) 
+0

Điều này sẽ sử dụng các thiết lập miền địa phương, mà có lẽ không phải là những gì diegogb muốn. Điều gì sẽ xảy ra nếu bạn cần xuất/phân tích cú pháp dữ liệu ở một miền địa phương khác như hiện tại? Mô-đun miền địa phương ngăn cản rõ ràng việc thay đổi ngôn ngữ trong một thư viện, vì vậy phương pháp này chỉ hợp lệ đối với các tập lệnh đơn giản. – dangonfast

+0

@ jeckyll2hide: cho các tập lệnh đơn giản hoặc các chương trình GUI trên máy tính để bàn hoặc bất kỳ thứ gì khác không cần phải phục vụ nhiều khách hàng (được nối mạng). –

+0

@ jeckyll2hide: nhưng OP đặc biệt muốn biết máy tính của bạn chạy script nào sẽ sử dụng, vì vậy đây chính xác là điều mong muốn. Đó là lý do tại sao OP đánh dấu câu trả lời này là được chấp nhận; vấn đề của họ đã được giải quyết. –

1

Bạn có thể sử dụng babel để phân tích số thập phân ở định dạng địa phương:

>>> parse_decimal('1,099.98', locale='en_US') 
Decimal('1099.98') 
>>> parse_decimal('1.099,98', locale='de') 
Decimal('1099.98') 
Các vấn đề liên quan