Just nu i M3-nätverket
Gå till innehåll

Hur kan 435,2+108,8-544 bli 1,525878906?


ottarpslisa

Rekommendera Poster

ottarpslisa

Hej,

nu tror jag att jag börjar bli tokig ändå.

Jag har en enkel tabell med verifikationer som har en summa (single med 2 decimaler)Verifikationerna visas i en rapport som räknar ihop summan för summan av posterna på verifikationen. Mitt problem är att när summan är ett decimaltal så blir summan på rapporten inte noll som den ska utan något helt ofattbart.

 

exempel: Ett inköp på -544 kronor varav 435,20 är varor och 108,80 är moms blir inte 0 utan 1,525878906 och några decimaler till avslutat med E

 

Någon som har någon idé (helt självklara idéer är också varmt välkomna)

 

MVH

Lisa

Länk till kommentar
Dela på andra webbplatser

Tyvärr är det så i datavärlden. Det blir lite problematiskt när man räknar med bråk i form av flyttal.

 

Det går helt enkelt inte att representera ett decimalt tal exakt och då blir det små små fel.

Läs mer här

http://en.wikipedia.org/wiki/Floating_point

 

Värdet du får är exetremt litet, jag antar att det står i stil med

1,525878906E-30

 

dvs felvärdet är 0,000...(30 nollor)...01528789606

 

Två lösningar. Avrunda. Du kan utan att skämmas avrunda till öre.

Kan inte Access men kanske det finns en Currency-enhet att deklarera värdena i? Då räknar den exakt då den inte behandlar värdena som flyttal.

Länk till kommentar
Dela på andra webbplatser

ottarpslisa

Förlåt att jag verkar lite korkad i denna frågan men...

Det hjälper inte om jag lägger det som currency varken i rapporten eller i tabellen och varför har jag inte haft detta problem tidigare?

 

Talet den ska räkna är verkligen exakt såhär: 435,2 + 108,8 - 544 helt enkelt superenkelt.

 

Har du några fler förslag eller är det bara jag som inte fattar det förra ordentligt?

Lisa

Länk till kommentar
Dela på andra webbplatser

Kan som sagt inte Access mekanismer i detalj. Currency borde duga. Lite långsammare beräkningar men den borde ge rätt värden. Fast med det sagt, kanske att värdena om redan finns i tabellen inte är exakta. Att det kanske står 435,200000000000001 resp 108,800000000000000000032 i tabellen och då spelar det ingen roll om du ställer om den till valuta.

 

Men testa att ställa om till Currency och kör igenom hela tabellen med en avrundning. Dvs skriv tillbaka det värde som det ska stå där, felet är alltid litet, du kan avrunda till ören som sagt.

 

Du får testa, jag kan bara komma med teorin. Någon som kan Access mer i detalj får gärna rycka in :)

Länk till kommentar
Dela på andra webbplatser

Cege Anderson

Det "borde" fungera om man anger att man skall visa med 2 decimalers noggrannhet. Möjligen att den avrundar till 0,00 eller -0,00

 

Har testat själv exakt som i detta fall och jag får 0 men jag kanske har ställt in något lite annorlunda.

Länk till kommentar
Dela på andra webbplatser

ottarpslisa

Förlåt att det har tagit tid att svara.

 

Att skriva in talen med bara 2 decimaler är ju helt omöjligt, trots att formatet är ställt till valuta och två decimaler.Så fort jag lämnar posten så ändras det tillbaka igen.

 

Lisa

Länk till kommentar
Dela på andra webbplatser

Cege Anderson

Hej hej

 

Hmmm, om jag nu skall tro något så tror jag att du måste ändra på flera ställen, dels i tabellen, dels i frågan, dels i formuläret, ( beroende på hur du matar in i din tabell )

 

// Cege

Länk till kommentar
Dela på andra webbplatser

ottarpslisa

Cege du är en klippa! :)

 

jag hade missat ställa in formatet på ett av formulären.

Lisa

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...