Toon posts:

[perl] check of een var numeriek is

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zou moeten checken of een variabele een numerieke waarde bevat.

Nu heb ik heel wat op het web gezocht en kom steeds op dezelfde code:

$var="0.00";
if ($var == 0 && $var ne "0") {
print "not a number";
}
else {
print "number";
}

Dit werkt perfect, totdat er bv. 00 of 0.00 in de string $var zit.

Wat denken jullie dat de beste oplossing is?

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Verwijderd schreef op 09 januari 2004 @ 10:18:
Wat denken jullie dat de beste oplossing is?
00 en 0.00 zijn gewoon geen getallen. Als je ze toch zo wilt zien dan doe je:
code:
1
2
3
4
5
6
7
8
9
10
11
$var="0.00";
if $var=="0.00" { $var="0" };
if $var=="00" { $var="0" };

#en dan je oude riedeltje weer...
if ($var == 0 && $var ne "0") {
      print "not a number";
}
else {
      print "number";
}

Siditamentis astuentis pactum.


Verwijderd

Topicstarter
Varienaja schreef op 09 januari 2004 @ 10:29:
[...]

00 en 0.00 zijn gewoon geen getallen. Als je ze toch zo wilt zien dan doe je:
Probleem is dat $var evengoed 0.0000000000 of 00.000, enz... kan zijn, dus kan ik dat moeilijk allemaal opvangen :)

Misschien kan ik beter zoeken naar alfanumerieke waarden en als er een letter in voorkomt is het geen getal.

  • Mr_Blobby
  • Registratie: Mei 2000
  • Laatst online: 12:42
Dit moet je met een reguliere expressie doen.
Bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
$variabele = "1.00";
if ($variabele =~ /^\d+(\.\d+)?$/){
  print "getal";
}
else
{ 
  print "geen getal";
}

Om alleen getallen toe te staan die bestaan uit één of meer cijfers, eventueel gevolgd door een punt met één of meer cijfers.

en zij zagen niet hoe spot in mij worstelde met verdriet


Verwijderd

Topicstarter
Mr_Blobby schreef op 09 januari 2004 @ 11:38:
Dit moet je met een reguliere expressie doen.
Thx!

Ik had ook een soortgelijke oplossing gemaakt (regexp die zocht naar A-z, enz) maar die van jou is beter :)

M.v.g
Karim

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Uit mijn boek:

print "\$x is a string\n" if ($x & ~$x);

"0.00" komt eruit als een string,
0.0 niet.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Verwijderd

Topicstarter
Om ook negatieve getallen toe te laten, zou die regexpr dan niet /^(\-)\d+(\.\d+)?$/ moeten zijn? Blijkt niet te werken aangezien dan enkel negatieve getallen als getal weergegeven worden.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

code:
1
(\-)
Die - hoef je daar niet te escapen en een ? erachter is wel handig om het teken niet te verplichten ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
drm schreef op 12 januari 2004 @ 12:56:
[...]
Die - hoef je daar niet te escapen en een ? erachter is wel handig om het teken niet te verplichten ;)
OK, thx! Ik ga maar eens een goede Regexpr tutorial zoeken ;)

Verwijderd

Denk ik nou te simpel met is_numeric()?

  • jwchess
  • Registratie: Februari 2001
  • Niet online
Ja, want het gaat hier om Perl en niet om PHP. ;)

Verwijderd

jwchess schreef op 13 januari 2004 @ 10:41:
[...]


Ja, want het gaat hier om Perl en niet om PHP. ;)
ok, shoot me :)

  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21

xos

Misschien een beetje mosterd na de maaltijd maar uit de perl faq: http://www.perldoc.com/pe...mber-whole-integer-float-

code:
1
2
3
4
5
6
7
8
   if (/\D/)            { print "has nondigits\n" }
   if (/^\d+$/)         { print "is a whole number\n" }
   if (/^-?\d+$/)       { print "is an integer\n" }
   if (/^[+-]?\d+$/)    { print "is a +/- integer\n" }
   if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
   if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal number\n" }
   if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
            { print "a C float\n" }

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Maar dan weet je nog niet of de scalar nou een string of een integer/float is.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Pagina: 1