[MSSQL] Simpele functie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 15:40
Tweakers,

Ik staar nu al een uur naar dit stomme stukje code, maar ik kom er maar niet uit

SQL:
1
2
3
4
5
6
7
8
9
10
11
declare @num float;
declare @diff float;

set @num    = 3.2
set @diff = @num - 3.0;

if(@diff > 0.2)
begin
    print @diff;
    print 'HET VERSCHIL IS GROTER DAN 0.2';
end


Maar hij doet het gewoon niet. In dit voorbeeld blijft hij gewoon uitprinten, terwijl het verschil (0,2) niet groter is dan 0,2

Wat doe ik verkeerd??

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

Je vertrouwt teveel op het floating point datatype. Dit is redelijk bekend gedrag van floating point getallen (wiki linkje).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:50

TeeDee

CQB 241

0.2 != 0.2 als het als float gedeclared is. Een int is in dit specifieke geval beter.

[ Voor 53% gewijzigd door TeeDee op 08-06-2009 16:53 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 15:40
Ik was er al een klein beetje bang voor, maar ik dacht met zon klein getal 3.0 - 3.2 moet dat weinig uitmaken.

Welke ander datatype kan ik dan gebruiken? mssql schijnt geen double te kennen..

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

Bij double zou je hetzelfde probleem hebben.
dit:

code:
1
2
3
4
5
6
public class Float {
    public static void main (String[] args) {
        System.out.println(3.2 - 3.0);
        System.out.println(3.2f - 3f);
    }
}

geeft
0.20000000000000018
0.20000005


Voor floats en doubles wordt het een ietsje pietsje groter dan 0.2 . De standaard oplossing bij het vergelijken van floats is om een epsilon te gebruiken. Meer hierover staat wel op de eerder aangehaalde wiki.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 18:43

BCC

Vermenigvuldingen met 10 en afronden op gehele getallen.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
BlackHawkDesign schreef op maandag 08 juni 2009 @ 16:53:
Welke ander datatype kan ik dan gebruiken? mssql schijnt geen double te kennen..
Decimal?
SQL:
1
2
3
4
5
6
7
8
9
10
11
declare @num decimal(18,3);
declare @diff decimal(18,3);

set @num    = 3.2
set @diff = @num - 3.0;

if(@diff > 0.2)
begin
    print @diff;
    print 'HET VERSCHIL IS GROTER DAN 0.2';
end

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Gebruik een decimal (numeric)

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 15:40
Dat delen door 10 heeft perfect gewerkt.

Toch zal ik even kijken of ik decimal gewoon kan gebruiken, want dat is veel logischer.

Allen bedankt voor de hulp!!
Pagina: 1