Python 2.7'yi kullanarak, sayılarımı verdiği 10 veya daha fazlası yerine iki ondalık basamağa nasıl yuvarlayabilirim?
print "financial return of outcome 1 =","$"+str(out1)
Python 2.7'yi kullanarak, sayılarımı verdiği 10 veya daha fazlası yerine iki ondalık basamağa nasıl yuvarlayabilirim?
print "financial return of outcome 1 =","$"+str(out1)
Yanıtlar:
Yerleşik işlevi kullanın round()
:
>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68
Veya yerleşik işlev format()
:
>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'
Veya yeni stil dizesi biçimlendirmesi:
>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'
Veya eski stil dize biçimlendirmesi:
>>> "%.2f" % (1.679)
'1.68'
yardım round
:
>>> print round.__doc__
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
Decimal("{:.2f}".format(val))
Decimal(format(val, '.2f'))
.
Decimal('123.345').quantize(Decimal('1.00'), rounding=decimal.ROUND_HALF_UP)
size verir Decimal('123.35')
. Öte yandan üzerinde Decimal(format(Decimal('123.345'), '.2f'))
verir Decimal('123.34')
123.345 ikili gösterimi az 123,345 çünkü.
Bahsettiğin bu yana finansal rakamlar, sen İSTEMİYORUM kayan nokta aritmetik kullanmak. Ondalık kullanmanız daha iyi.
>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')
Yeni stille metin çıktı biçimlendirmesi format()
(varsayılan olarak yarım eşit yuvarlamadır):
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52
Kayan nokta belirsizliği nedeniyle yuvarlamadaki farklılıkları görün:
>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2) # This converts back to float (wrong)
33.51
>>> Decimal(33.505) # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')
Finansal değerleri yuvarlamanın doğru yolu :
>>> Decimal("33.505").quantize(Decimal("0.01")) # Half-even rounding by default
Decimal('33.50')
Farklı işlemlerde başka yuvarlama türlerinin olması da yaygındır:
>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')
Getiri sonucunu simüle ediyorsanız, muhtemelen her faiz döneminde yuvarlamanız gerekeceğini unutmayın, çünkü kuruş kesir ödeyemez / alamaz veya yüzde kesir üzerinden faiz alamazsınız. Simülasyonlar için doğal belirsizlikler nedeniyle kayan nokta kullanmak oldukça yaygındır, ancak bunu yaparsanız, her zaman hatanın orada olduğunu unutmayın. Bu nedenle, sabit faizli yatırımlar bile bu nedenle getirilerde biraz farklılık gösterebilir.
Şunları da kullanabilirsiniz str.format()
:
>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
Peni / tamsayılarla çalışırken. 115 (1.15 $ 'da olduğu gibi) ve diğer sayılarla ilgili bir sorunla karşılaşacaksınız.
Bir Tamsayıyı Float'a dönüştürecek bir fonksiyonum vardı.
...
return float(115 * 0.01)
Bu çoğu zaman işe yaradı ama bazen şöyle bir şey döndürürdü 1.1500000000000001
.
Ben de işlevimi şöyle döndürdüm ...
...
return float(format(115 * 0.01, '.2f'))
ve bu geri dönecek 1.15
. Değil '1.15'
veya 1.1500000000000001
(dize değil, kayan nokta döndürür)
Bunu çoğunlukla gönderiyorum, böylece bu senaryoda ne yaptığımı hatırlayabiliyorum çünkü bu google'daki ilk sonuç.
Bence en iyisi format () işlevini kullanmak:
>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60
Ama şunu söylemeliyim: finansal değerlerle çalışırken yuvarlak veya format kullanmayın.
format
f biçimi için dize olmayan gerektirir. Değilse, bir ValueError aldınız. Doğru kod: format(out1, '.2f')
dizeye çevrim yapmadan
Round () fonksiyonunu kullandığımızda doğru değerler vermeyecektir.
yuvarlak (2.735) ve yuvarlak (2.725) kullanarak kontrol edebilirsiniz
lütfen kullan
import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
Oldukça basit bir çözüm, önce float'ı dizeye dönüştürmek, ilk dört sayının alt dizesini seçmek ve son olarak alt dizeyi tekrar float'a dönüştürmektir. Örneğin:
>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1
Süper verimli olmayabilir ama basit ve işe yarıyor :)
Decimal
ne yapmaya çalıştığınıza bağlı olarak tamsayı veya s kullanmak isteyebilirsiniz .