2009-11-24 29 views
8

düşünün:Bu bölüm neden Python'da çalışmıyor?

>>> numerator = 29 
>>> denom = 1009 
>>> print str(float(numerator/denom)) 
0.0 

nasıl bir ondalık dönmek yapabilirim? Bir kesir kısmı olacağını zaman aşağı kesilmiş oluyor bir tamsayı sonucunu verir: iki tamsayı argüman sunulduğunda

+1

Biraz bir kenara, ancak "float", Python standart kitaplığındaki "Ondalık" tipi ile aynı değildir. "Sadece ondalık bir değer döndürmesini istiyorum" dediğinizde, gerçekten ne demek istediğiniz "ondalık notasyonda kesirli bir değeri temsil eden bir dizgeyi döndürmek istiyorum", değil mi? Python'da –

cevap

24

sürüm 3 kadar, Python'un bölünme operatörü, /, C'nin bölünme operatörü gibi davrandı. Bkz: PEP 238

Python 2'de
>>> n = 29 
>>> d = 1009 
>>> print str(float(n)/d) 
0.0287413280476 

(ve belki daha eski) şunu kullanabilirsiniz:

Python 2.x
>>> from __future__ import division 
>>> n/d 
0.028741328047571853 
+0

-7 // 3 = -3 (kalan = 2) ve C/C++ 'da -7/3 = -2 (geri kalan = -1), bu davranışın C'deki gibi Python ile aynı olduğunu söylemem./C++ – Artur

7

, bölünme işleri o C benzeri dillerde yaptığı gibi: Her iki takdirde argümanlar tamsayılardır, sonuç bir tamsayıya kesilir, bu nedenle 29/1009, float 0.0'dır.

Python 3.x ise
print str(float(numerator)/denominator) 

, bölünme daha doğal davranır, bu nedenle (kayan nokta hatası içinde) doğru matematiksel bir sonuç elde edersiniz: Bunu düzeltmek için, bölen önce Ģamandıraya attı.

0
print str(float(numerator)/float(denom)) 
+0

İşlenenlerden herhangi birini float() için yapmak yeterlidir. Genelde, okuyucuları normalde daha kolay görecekleri ifadenin başlangıcında oyuncuyu bulduğu için pay sahibini tavsiye ederim. –

+0

Evet öyle, ama bu daha çok "uygun" görünüyordu çünkü sadece dökümde daha şeffaftı. Ama evet, tek başına bir tane yapmak yeterlidir. – inspectorG4dget

1

Değerlendirmenizin sonucunda, sonucu işleyeceksiniz.