Saya mendapatkan banyak desimal dalam output kode ini (Fahrenheit to Celsius converter).
Kode saya saat ini terlihat seperti ini:
def main():
printC(formeln(typeHere()))
def typeHere():
global Fahrenheit
try:
Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
except ValueError:
print "\nYour insertion was not a digit!"
print "We've put your Fahrenheit value to 50!"
Fahrenheit = 50
return Fahrenheit
def formeln(c):
Celsius = (Fahrenheit - 32.00) * 5.00/9.00
return Celsius
def printC(answer):
answer = str(answer)
print "\nYour Celsius value is " + answer + " C.\n"
main()
Jadi pertanyaan saya adalah, bagaimana saya membuat putaran program setiap jawaban ke tempat desimal ke-2?
Jawaban:
Anda dapat menggunakan
round
fungsi, yang mengambil sebagai argumen pertama angka dan argumen kedua adalah ketepatan setelah titik desimal.Dalam kasus Anda, itu akan menjadi:
sumber
round()
untuk mengapung bisa mengejutkan: misalnya,round(2.675, 2)
memberi2.67
daripada yang diharapkan2.68
. "round(2.675, 2)
memberi2.67
bukannya2.68
tidak ada hubungannya dengan pembulatan Banker.Menggunakan
str.format()
's sintaks untuk menampilkananswer
dengan dua desimal (tanpa mengubah nilai yang mendasarianswer
):Dimana:
:
memperkenalkan spesifikasi format0
memungkinkan tanda-padding nol untuk jenis numerik.2
mengatur presisi ke2
f
menampilkan nomor sebagai nomor titik tetapsumber
0.5357...
lebih dekat0.54
daripada daripada0.53
, jadi pembulatan menjadi0.54
masuk akal."{:0.2f}".format(1.755)
-> 1,75"{:0.2f}".format(1.7551)
-> 1,76 - Namun, saya berharap keduanya sama dengan 1,76.Sebagian besar jawaban menyarankan
round
atauformat
.round
kadang-kadang dibulatkan, dan dalam kasus saya, saya perlu nilai variabel saya untuk dibulatkan dan tidak hanya ditampilkan seperti itu.Saya menemukan jawabannya di sini: Bagaimana cara saya membulatkan angka floating point ke tempat desimal tertentu?
atau:
sumber
round(2.354, 2) # -> 2.35
10**d
sebagai gantinyaint('1' + ('0' * d))
.sumber
Anda ingin melengkapi jawaban Anda.
round(value,significantDigit)
adalah solusi biasa untuk melakukan ini, namun ini kadang - kadang tidak beroperasi seperti yang diharapkan dari perspektif matematika ketika angka tersebut langsung lebih rendah (di sebelah kiri) angka yang Anda bulatkan memiliki5
.Berikut beberapa contoh perilaku yang tidak dapat diprediksi ini:
Dengan asumsi tujuan Anda adalah melakukan pembulatan statistik tradisional dalam sains, ini adalah pembungkus yang berguna untuk membuat
round
fungsi berfungsi seperti yang diharapkan membutuhkanimport
hal-hal tambahan sepertiDecimal
.Aha! Jadi berdasarkan ini kita dapat membuat fungsi ...
Pada dasarnya ini menambahkan nilai yang sangat kecil ke string untuk memaksanya untuk mengumpulkan dengan benar pada contoh yang tidak terduga di mana ia biasanya tidak dengan
round
fungsi ketika Anda mengharapkannya. Nilai yang nyaman untuk ditambahkan adalah di1e-X
manaX
panjang string angka yang Anda coba gunakanround
pada plus1
.Pendekatan penggunaan
10**(-len(val)-1)
itu disengaja, karena jumlah kecil terbesar yang dapat Anda tambahkan untuk memaksa perubahan, sambil juga memastikan bahwa nilai yang Anda tambahkan tidak pernah mengubah pembulatan bahkan jika desimal.
hilang. Saya bisa menggunakan hanya10**(-len(val))
dengan persyaratanif (val>1)
untuk mengurangi1
lebih banyak ... tapi lebih mudah untuk selalu mengurangi1
karena tidak akan banyak mengubah rentang angka desimal yang dapat diatasi dengan solusi ini. Pendekatan ini akan gagal jika nilai Anda mencapai batas tipe, ini akan gagal, tetapi untuk hampir seluruh rentang nilai desimal yang valid, itu harus bekerja.Jadi kode yang sudah selesai akan menjadi seperti:
... harus memberi Anda hasil yang Anda harapkan.
Anda juga dapat menggunakan pustaka desimal untuk mencapai hal ini, tetapi pembungkus yang saya usulkan lebih sederhana dan mungkin lebih disukai dalam beberapa kasus.
Sunting: Terima kasih Blckknght untuk menunjukkan bahwa
5
kasus pinggiran hanya terjadi untuk nilai-nilai tertentu di sini .sumber
Cukup gunakan pemformatan dengan% .2f yang memberi Anda pembulatan menjadi 2 desimal.
sumber
Anda dapat menggunakan operator pemformatan string python "%". "% .2f" berarti 2 digit setelah titik desimal.
http://docs.python.org/2/library/stdtypes.html#string-formatting
sumber
Anda dapat menggunakan operator bulat hingga 2 desimal
sumber
Anda dapat menggunakan fungsi putaran.
akan memberi Anda jawaban 80.234
Dalam kasus Anda, gunakan
Semoga ini membantu :)
sumber
Jika Anda perlu menghindari masalah floating point pada angka pembulatan untuk akuntansi, Anda dapat menggunakan putaran numpy.
Anda perlu menginstal numpy:
dan kodenya:
cetakan
Anda harus menggunakannya jika Anda mengelola uang dengan pembulatan hukum.
sumber
Berikut adalah contoh yang saya gunakan:
sumber
Tidak yakin mengapa, tetapi format '{: 0.2f}' (0,5357706) memberi saya '0,54'. Satu-satunya solusi yang bekerja untuk saya (python 3.6) adalah sebagai berikut:
sumber
Karena Anda ingin jawaban Anda dalam angka desimal, maka Anda tidak perlu mengetikkan variabel jawaban Anda ke fungsi printC ().
dan kemudian gunakan Pemformatan String gaya printf
sumber
Jawabannya adalah dari: https://stackoverflow.com/a/29651462/8025086
sumber