Bagaimana cara mendapatkan angka setelah koma desimal?
Misalnya, jika sudah 5.55
, bagaimana cara mendapatkannya .55
?
python
floating-point
decimal
l --''''''--------- '' '' '' '' '' ''
sumber
sumber
Jawaban:
Pendekatan yang mudah untuk Anda:
sumber
number_dec = str(number-int(number)).split('.')[1]
5.55 % 1
, yang juga merupakan jawaban yang lebih berguna secara umum - seseorang dapat menggunakan pendekatan pembagian modulo dalam berbagai bahasa, sedangkan jawaban di atas khusus untuk Python..55
), yang mungkin tidak Anda harapkan karena judul pertanyaan!str(5.55 - int(5.55))[1:]
mengembalikan.5499999999999998
alih-alih yang.55
disebutkan dalam pertanyaan.Ingatlah bahwa ini tidak akan membantu Anda dengan masalah pembulatan floating point. Yaitu, Anda mungkin mendapatkan:
Atau sebaliknya sedikit dari 0,55 yang Anda harapkan.
sumber
modf
, itu dapat mengacaukan presisi juga:math.modf(5.55)
akan kembali (0.5499999999999998, 5.0).x%1
ini hampir dua kali lebih cepat darix-int(x)
danmodf(x)[0]
metode (waktunya adalah 980ns, 1.39us, dan 1.47us rata-rata lebih dari 1000000 berjalan). Nilai sayax
selalu positif jadi saya tidak perlu khawatir tentang itu.Gunakan modf :
sumber
math.modf(2.53) = (0.5299999999999998, 2.0)
jawaban yang diharapkan adalah 0,53Bagaimana dengan:
Atau, menggunakan numpy:
sumber
Dengan menggunakan
decimal
modul dari pustaka standar, Anda dapat mempertahankan presisi asli dan menghindari masalah pembulatan floating point:Sebagai catatan kindall di komentar, Anda harus mengonversi native ke string terlebih dahulu.
float
sumber
n = 5.55
, n adalah pelampung, dan Anda harus melakukannyaDecimal(str(n)) % 1
untuk mendapatkan bagian pecahan. (Ini tidak diperlukan jika Anda memiliki bilangan bulat, tetapi tidak ada salahnya.)10.0/3 % 1
setidaknya di sistem sayaDecimal.from_float(1.2)
(yang sekarang dapat ditulis sebagaiDecimal(1.2)
), Anda akan mengalami masalah pembulatan, yang coba dihindari oleh jawaban ini.Coba Modulo:
sumber
mirip dengan jawaban yang diterima, pendekatan yang lebih mudah menggunakan string akan menjadi
sumber
number = 5.55; "." in number
memberiTypeError: argument of type 'float' is not iterable
. Dan apa yang akan Anda lakukan jikanumber = 1e-5
?float
; Python tidak menyimpan pengetahuan apa pun tentang format aslinya.number = 1e-5
Contoh saya berlaku sama baiknya untuknumber = 0.00001
:str
representasi bilangan dalam notasi ilmiah. Anda pasti ingin berurusan dengane+
sebaik-baiknyae-
.sumber
sumber
Ini adalah solusi yang saya coba:
sumber
Terkadang tertinggal nol penting
sumber
Hanya dengan menggunakan operator sederhana divisi '/' dan lantai divisi '//' Anda bisa dengan mudah mendapatkan bagian pecahan dari pelampung yang diberikan.
sumber
Gunakan floor dan kurangi hasilnya dari bilangan asli:
sumber
import math
, mengapa tidak menggunakan sajamath.modf()
?math.floor(-1.1) == -2
tapiint(-1.1) == -1
. Padahal untuk pertanyaan ini menggunakanint
lebih tepat.Angka float tidak disimpan dalam format desimal (base10). Bacalah dokumentasi python tentang ini untuk memuaskan diri Anda mengapa. Oleh karena itu, untuk mendapatkan representasi base10 dari float tidak disarankan.
Sekarang ada alat yang memungkinkan penyimpanan data numerik dalam format desimal. Di bawah ini adalah contoh menggunakan
Decimal
perpustakaan.sumber
Contoh:
Ini akan memberi Anda dua angka setelah koma, 55 dari contoh itu. Jika Anda membutuhkan satu angka, kurangi dengan 10 kalkulasi di atas atau tambah tergantung berapa banyak angka yang Anda inginkan setelah desimal.
sumber
Ini pasti berhasil
sumber
Bagaimana dengan:
Keluaran:
print(b)
0.23399999999999999
round(b, length-2)
0.234
Karena putaran dikirim ke panjang string desimal ('0,234'), kita hanya dapat minus 2 untuk tidak menghitung '0', dan mencari tahu jumlah titik desimal yang diinginkan. Ini seharusnya bekerja paling sering, kecuali Anda memiliki banyak tempat desimal dan kesalahan pembulatan saat menghitung b mengganggu parameter putaran kedua.
sumber
Anda mungkin ingin mencoba ini:
Ini akan kembali
0.55
.sumber
keluaran: 0,55
sumber
Lihat apa yang sering saya lakukan untuk mendapatkan angka setelah koma desimal di python 3:
sumber
Jika Anda menggunakan panda:
sumber
Pilihan lainnya adalah menggunakan
re
modul denganre.findall
ataure.search
:Keluaran
Jika Anda ingin menyederhanakan / memodifikasi / menjelajahi ekspresi, itu telah dijelaskan di panel kanan atas regex101.com . Jika mau, Anda juga dapat melihat di tautan ini , bagaimana kecocokannya dengan beberapa masukan sampel.
Sumber
Bagaimana cara menghilangkan bilangan mengambang tambahan dalam pengurangan python?
sumber
Saya telah menemukan bahwa angka yang sangat besar dengan bagian pecahan yang sangat besar dapat menyebabkan masalah saat menggunakan modulo 1 untuk mendapatkan pecahan.
Saya malah mengambil bagian integral dan menguranginya terlebih dahulu untuk membantu menyederhanakan sisanya.
sumber
Contoh lain menggunakan modf
sumber
Solusinya menggunakan modulo dan pembulatan.
Output Anda akan menjadi 0,55
sumber
Anda dapat menggunakan ini:
sumber
Solusi gila lainnya adalah (tanpa mengubah dalam string):
sumber