2011-01-24 25 views
29

Python cung cấp một phương pháp thuận tiện dài() để chuyển đổi chuỗi dài:chuyển đổi chuỗi dài trong python

long('234') 

; chuyển đổi '234' thành một dài

Nếu phím dùng trong 234,89 sau đó python sẽ nâng cao một thông báo lỗi:

ValueError: invalid literal for long() 
with base 10: '234.89' 

Làm thế nào nên chúng tôi một lập trình viên python xử lý các tình huống nơi một chuỗi với một giá trị thập phân?

Cảm ơn bạn =)

+2

chuyển đổi số đó thành phao? Bắt lỗi và báo cáo cho người dùng? – John

+4

Câu hỏi này và câu trả lời của nó chỉ áp dụng cho Python 2. Python 3 không còn có kiểu dài, hãy xem http://python3porting.com/differences.html#long – hertzsprung

Trả lời

25

long chỉ có thể đưa mui trần chuỗi mà có thể kết thúc trong một cơ sở 10 chữ số. Vì vậy, thập phân đang gây hại. Những gì bạn có thể làm là, float giá trị trước khi gọi số long. Nếu chương trình của bạn là trên Python 2.x nơi int và sự khác biệt dài quan trọng, và bạn chắc chắn rằng bạn không sử dụng số nguyên lớn, bạn có thể chỉ cần sử dụng int để cung cấp khóa là tốt.

Vì vậy, câu trả lời là long(float('234.89')) hoặc chỉ có thể là int(float('234.89')) nếu bạn không sử dụng số nguyên lớn. Cũng lưu ý rằng sự khác biệt này không phát sinh trong Python 3, bởi vì int được nâng cấp thành dài theo mặc định. Tất cả các số nguyên dài trong python3 và gọi để bí mật chỉ là int

+0

Cảm ơn bạn, điều này thực sự hữu ích – zfranciscus

+2

int ('234,89') thất bại với cùng một lỗi như được hiển thị trong câu hỏi. – payne

+0

@ payne- cảm ơn bạn đã chỉ ra. Tôi đã sửa chữa nó. Của bạn là chính xác. –

12

Vâng, chờ đợi không thể giữ bất cứ điều gì nhưng số nguyên.

Một lựa chọn là sử dụng một float: float('234.89')

Các tùy chọn khác là để cắt xén hoặc tròn. Chuyển đổi từ một phao để lâu sẽ cắt cho bạn: long(float('234.89'))

>>> long(float('1.1')) 
1L 
>>> long(float('1.9')) 
1L 
>>> long(round(float('1.1'))) 
1L 
>>> long(round(float('1.9'))) 
2L 
Các vấn đề liên quan