Saya mendapatkan kesalahan aneh yang belum pernah saya lihat sebelumnya dan saya mencoba mencari beberapa informasi melalui web tetapi tidak berhasil.

Saya mencoba melakukan hal sederhana, mengubah str menjadi flaot. Ketika saya mencetak nilainya dalam gaya angka klasik (37442,20) tetapi ketika saya ingin mengubahnya menjadi flaot saya mendapatkan Kesalahan yang menunjukkan nilai dalam campuran angka dan huruf (37\u202f442.20). Dengan baris berikut saya dapatkan:

print(value)
print(type(value))

37 442.20
<class 'str'>

print(float(value))
ValueError: could not convert string to float: '37\u202f442.20'

Seseorang tahu apa yang salah di sini?

1
Jojo 16 Januari 2021, 19:12

3 jawaban

Jawaban Terbaik
s = "37 442.20"

print (float(s.replace(' ','').encode('ascii', 'ignore')))

Keluaran:

37442.2

Anda memiliki masalah ruang dan penyandian.

Jadi Anda menggunakan metode replace() pada string Anda dan encode() untuk melewati masing-masing dan mencetak float Anda.

Untuk menghindari kesalahan pada konversi daftar string non-digit campuran dan string digit, dan mempertimbangkan masalah penyandian Anda, Anda dapat melakukan:

import re

sl = ["37 442.20","aaa.83","4a3.","aaaa","345"]

for s in sl:
    s = s.replace(' ','').encode('ascii', 'ignore')
    if re.match(b"^([0-9]+){0,1}[.]{0,1}([0-9]+)$",s):
        print (float(s))
    else:
        print ("%s not digit" % s.decode())

Keluaran:

37442.2
aaa.83 not digit
4a3. not digit
aaaa not digit
345.0
2
Synthase 16 Januari 2021, 16:29

Itu hanya karena Anda memiliki ruang putih di antara angka. Hapus spasi putih dan berikan nilainya ke float dan itu akan berfungsi dengan baik.

Salah satu cara untuk melakukan ini:

value = “”.join(‘37 442.20’.split())
print(float(value))
2
Jacob Lee 16 Januari 2021, 16:16

Karakter \u202f bukan spasi normal. https://www.fileformat.info/info/unicode/char/ 202f/index.htm

Anda dapat mencoba menghapusnya terlebih dahulu sebelum mengonversi. Sebagai contoh: u'37\u202f442.20'.encode('ascii', 'ignore')

0
Kotori0 16 Januari 2021, 16:17