Değerlerini kayan noktaya zorlayan eval
benzeri bir işlevi yürütmenin bir yolu var mı? BenPython: değerleri() değerleri kayan noktaya zorlayan?
eval('1/3')
umuduyla ve kayan nokta değeri 0,333333 yerine tamsayı değeri 0.
Değerlerini kayan noktaya zorlayan eval
benzeri bir işlevi yürütmenin bir yolu var mı? BenPython: değerleri() değerleri kayan noktaya zorlayan?
eval('1/3')
umuduyla ve kayan nokta değeri 0,333333 yerine tamsayı değeri 0.
tut __future__.division
için derleyici bayrak, döndürülen kod nesne üzerinde eval()
çalıştırmak sonra, compile()
onu ve kodunuzu geçmektedir.
(note by mh) Bu, beklenmedik yan etkilere sahip olabilecek, bölme işleminin global olarak değiştirilmemesi avantajına sahiptir. (son not)
>>> import __future__
>>> eval(compile('1/3', '<string>', 'eval', __future__.division.compiler_flag))
0.33333333333333331
Bu tam olarak ihtiyacım olan şey. Özellikle iyi olan, programın diğer kısımlarında beklenmedik yan etkilere sahip olabilecek küresel ortamı değiştirmemesidir. Derlemenizin işaretini ve kullanımını açıkça göstermek için örneğinizi güncelleyeceğim. Teşekkürler!! –
Oh, bu sevimli, sadece bunu gördüm. :-) – kindall
Ondalık basamakları ikiye sınırlayabilir miyim? – Jim
Sen soru dönmek zorunda am gerçekten: Ben Python varsayılan olarak nokta bölme kayan yapmak nasıl alacağınızı öğrenebilirsiniz. Cevap:
from __future__ import division
aslında hayır, sadece girilen ifadenin değerlendirilmesi için bunu açmak istiyorum. Ancak, bunu yapamamak, bu sadece iyi çalışır. Teşekkürler! –
'__future__' ayarları modül başınadır, böylece ayrı bir modülde yapabilirsiniz, ancak Ignacio'nun yolu daha iyidir. – kindall
sorun ekspresyonunda bir reel değer olmasıdır.
bu eval('1/3.0')
Bu Python3 varsayılan olarak çalışır
Python 3.2 (r32:88445, Dec 8 2011, 15:26:51)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> eval("1/3")
0.3333333333333333
Python2 için, Lafada en dayanarak from __future__ import division
$ python -Qnew
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> eval("1/3")
0.3333333333333333
eşdeğerdir hangi (komut satırında -Qnew
geçebilir deneyin Eğer giriş dizesini bir değişkenden alıyorsanız:
>>> string = '1/3'
>>> print eval(string+'.0')
0.333333333333
Dizgisi = (1/3) 'gibi ifadelerde başarısız olur. – Dilawar
'string = (1/3)' ifadesi, bir dize oluşturmuyor. 1/3'ü hesaplar, 0'lık bir tamsayı sonucu üretir ve sonucu string olarak adlandırılan bir değişkende saklar. Öyleyse, eval (string + '. 0'), '' .0'' dizgisi ile tamsayı sıfırı birleştirmeye çalışacaktır. Girişiniz önceden bir tam sayı olarak değerlendirilmemiş olan gerçek bir dizeyse işe yarayacaktır. – Knowbody
Python ... sürümünde ...? –
python'un herhangi bir sürümündeki yöntemlere açık. –