Rundungsfehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cecile
User
Beiträge: 18
Registriert: Dienstag 24. August 2010, 12:20

Hallo,
Ich habe in Python verschiedene Probleme mit Rundungsfehlern:
Beispiel1: in den Meisten Fällen ist s!=s1, wieso?

Code: Alles auswählen

s=-2
s1=-2
searchend=2.2
while s < searchend:
	print s,s1
	s=s+0.2
	s1=round(s1+0.2,1)
	print s==s1
Beispiel2, Rundungsfehler beim lesen aus excel:
In einer Excel Tabelle habe ich folgende 2 Werte:
X=[0.031916156411171, 0.169034600257874], das unten angegeben Programm liest aber folgendes:
X=[0.031933994107021135, 0.16905243795372371], was kann ich dagegen tun

Code: Alles auswählen

import clr
clr.AddReference("Microsoft.Office.Interop.Excel")
#import winforms
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System.Windows.Forms import *

import Microsoft.Office.Interop.Excel as Excel

class Workbook:
        def __init__(self):         

               openFile = OpenFileDialog()
               openFile.Filter = "xls files (*.xls)|*.xls"
               if openFile.ShowDialog() == DialogResult.OK:
                     filename = openFile.FileName
                     print 'Loading data from ', filename, '...'
                     self.excel = Excel.ApplicationClass()
                     self.excel.Visible = True # makes the Excel application visible to the user
                     self.workbook = self.excel.Workbooks.Open(filename)


        def ReadCell(self,sheetname,line,col):
                self.worksheet = self.workbook.Worksheets(sheetname)
                cell = self.worksheet.Cells(line,col)
                return cell.Value2
BlackJack

@cecile: Dagegen kannst Du gar nichts tun weil das ein grundsätzliches Problem mit der internen Darstellung von Gleitkommazahlen ist. Nicht nur in Python, sondern generell. Kannst ja mal in Excel 10 Felder mit 0.1 belegen, davon die Summe bilden und die dann mit 1 vergleichen. Wenn Excel nicht „schummelt” dann kommt da Falsch bei heraus.

Lesestoff: http://floating-point-gui.de/
Antworten