Rumah  >  Soal Jawab  >  teks badan

Masalah dengan eval dalam python

Seperti yang ditunjukkan dalam rajah, apabila Python2.7 menggunakan eval untuk mengira ungkapan titik terapung,

eval('0.3-0.1==0.2')  # 输出为False
eval('%d - %d == %d'%(0.3, 0.1, 0.2))  # 输出为True
eval('%s - %s == %s'%(0.3, 0.1, 0.2))  # 输出为False
eval('%s - %s == %s'%('0.3', '0.1', '0.2'))  # 输出为False

Ini sangat mengelirukan saya tidak dapat mencari jawapan dalam talian.


Kemas kini:

Saya ada soalan lain,
a=0.3-0.1, keluaran print(a) 0.1999999999999998; b=0.2,
tetapi keluaran print('%s==%s'%(a,b)) 0.2 ==0.2,
Mengapakah perubahan daripada 0.1999999999999998 kepada 0.2 apabila memformat rentetan?

仅有的幸福仅有的幸福2676 hari yang lalu994

membalas semua(3)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-06-22 11:54:25

    Secara umumnya ia tidak boleh digunakan terus dalam komputer == Bandingkan sama ada dua nombor titik terapung adalah sama.

    Kerana nilai titik terapung mempunyai ralat dalam komputer.

    Python mempunyai decimalfraction 2 modul untuk pengiraan titik terapung berketepatan tinggi.


    Contoh

    >>> from fractions import Fraction
    >>> Fraction('0.3')-Fraction('0.1') == Fraction('0.2')
    True
    >>> from decimal import Decimal
    >>> Decimal('0.3')-Decimal('0.1') == Decimal('0.2')
    True
    >>> 

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-06-22 11:54:25

    Ini tidak ada kaitan dengan eval, ini terutamanya soal ketepatan Ini akan ditemui dalam semua bahasa pengaturcaraan Jika anda mencuba 0.3-0.1 == 0.2, ia akan mengembalikan masalah Baidu JavaScript 0.2-0.1 kemudian lihat "Prinsip Komposisi Komputer" 》Perwakilan data awal.

    https://stackoverflow.com/que... Ini adalah jawapan yang mendapat undian tinggi.

    balas
    0
  • 为情所困

    为情所困2017-06-22 11:54:25

    eval('0.3-0.1==0.2')  # 输出为False, 是因为0.3-0.1=0.19999999999999998
    eval('%d - %d == %d'%(0.3, 0.1, 0.2))  # 输出为True, 是因为你%d传入是整数,相当于0-0=0
    eval('%s - %s == %s'%(0.3, 0.1, 0.2))  # 输出为False, 参考1
    eval('%s - %s == %s'%('0.3', '0.1', '0.2'))  # 输出为False, 参考1

    balas
    0
  • Batalbalas