2011-01-30 93 views
8

Tôi muốn chuyển đổi 1/2 trong python để khi tôi nói in x (trong đó x = 1/2) nó trả về 0,5Python Chuyển đổi phân số thành số thập phân

Tôi đang tìm cách cơ bản nhất để làm điều này , mà không sử dụng bất kỳ chức năng chia tách, vòng lặp hoặc bản đồ

Tôi đã thử phao (1/2) nhưng tôi nhận được 0 ... ai đó có thể giải thích cho tôi tại sao và cách khắc phục?

Có thể thực hiện việc này mà không sửa đổi biến x = 1/2 ??

Cảm ơn

+0

bạn có thể xây dựng nhiều hơn những gì bạn có ý nghĩa bởi 'mà không sửa đổi biến x = 1/2'? – eat

+0

Đây có phải là câu hỏi mẹo như là một phần của lớp học mà bạn đang theo học không? Nếu có, vui lòng đánh dấu nó là [bài tập về nhà]. –

Trả lời

23

trong python 3.x bất kỳ bộ phận nào trả về một phao;

>>> 1/2 
0.5 

để đạt được điều đó trong python 2.x, bạn phải buộc chuyển đổi float:

>>> 1.0/2 
0.5 

hoặc nhập khẩu các bộ phận từ "tương lai"

>>> from __future__ import division 
>>> 1/2 
0.5 

Một bổ sung: không có loại phân số được tích hợp sẵn nhưng có trong thư viện chính thức:

>>> from fractions import Fraction 
>>> a = Fraction(1, 2) #or Fraction('1/2') 
>>> a 
Fraction(1, 2) 
>>> print a 
1/2 
>>> float(a) 
0.5 

và vân vân ...

+4

hiệu chỉnh - trong Python3, '/' thực hiện phân chia phao và '//' thực hiện phân chia int; trong Python2, phụ thuộc vào các đối số, '/' có thể là phân chia float (nếu ít nhất một arg là float) hoặc int (nếu tất cả arg là int) –

7

lẽ Bạn đang sử dụng Python 2. Bạn có thể "sửa chữa" bằng cách sử dụng bộ phận:

from __future__ import division 

vào lúc bắt đầu của kịch bản của bạn (trước khi bất kỳ nhập khẩu khác). Theo mặc định trong Python 2, toán tử / thực hiện phân chia số nguyên khi sử dụng toán hạng nguyên, loại bỏ các phần phân đoạn của kết quả.

Điều này đã được thay đổi trong Python 3 sao cho / luôn là điểm phân chia nổi. Toán tử // mới thực hiện phân chia số nguyên.

+0

Tôi không thể đặt này bên trong một chức năng .. nó cho tôi một lỗi nói rằng dòng phải được đặt ở đầu của tập tin .. – Kartik

+0

Đúng vậy.Một cách khác để buộc phân chia dấu phẩy động là sử dụng ít nhất một toán hạng dấu phẩy động. Vì vậy, hãy thử '1/2.0' hoặc' 1/float (2) '. –

+0

Tôi biết như vậy nhưng vấn đề là tôi không thể sửa đổi đầu vào .. i cant thay đổi x = '1/2' .. tất cả tôi có thể làm là áp dụng các chức năng khác nhau để nó để có được 0,5 .. Có thể là đường? – Kartik

6

Hoặc, bạn có thể buộc phân chia dấu phẩy động bằng cách chỉ định số thập phân hoặc nhân với 1.0. Ví dụ (từ bên trong thông dịch viên python):

>>> print 1/2 
0 
>>> print 1./2 
0.5 
>>> x = 1/2 
>>> print x 
0 
>>> x = 1./2 
>>> print x 
0.5 
>>> x = 1.0 * 1/2 
>>> print x 
0.5 

EDIT: Hình như tôi đã bị đánh đến những cú đấm trong thời gian nó đã gõ lên phản ứng của tôi :)

3

Không có số lượng 1/2 bất cứ nơi nào. Python không đại diện cho các số hữu tỉ với kiểu tích hợp - chỉ là số nguyên và số dấu phẩy động. 1 được chia cho 2 - theo các quy tắc phân chia số nguyên - kết quả là 0. float(0) là 0.

3

Nếu đầu vào là một chuỗi, sau đó bạn có thể sử dụng Phân số trực tiếp trên đầu vào:

from fractions import Fraction 

x='1/2' 
x=Fraction(x) #change the type of x from string to Fraction 
x=float(x)  #change the type of x from Fraction to float 
print x 
Các vấn đề liên quan