[php]Aantal cijfers in getal

Pagina: 1
Acties:
  • 306 views sinds 30-01-2008
  • Reageer

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Naar aanleiding van:
http://gathering.tweakers.net/forum/list_messages/434476/1?limit=25

Vraag erbij voor de Search:
Van een willlekeurig getal wil ik graag weten uit hoeveel cijfers het bestaat.
Een aanvulling op het antwoord:
PHP:
1
<?                     // Output:echo strlen(1234);   // 4echo strlen(123);    // 3echo strlen(0123);   // 2?>

0123 wordt gezien als octaal getal (in mijn PHP omgeving), in decimale getallen wordt dat 83. Dus 2 als return value, ipv 4 of 3 wat je zou kunnen verwachten.


Dat het even duidelijk is. :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dan zet je er evt "" omheen...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Toch weer open, octale getallen willen nog wel es onhandig zijn.

  • Grum
  • Registratie: Juni 2001
  • Niet online
helaas ben ik der ook weer en ik helaas ben ik van mening dattie terecht dicht was >:)

De enige keer dat jij er last van zou KUNNEN hebben is het 100% je eigen fout omdat je er gewoon domweg quotes (single of double) omheen kan zetten dan.

Je hebt het zelf in de hand waneer het fout gaat en het is dus alleen zaak dat je eventjes goed nadenkt en oplet wat je doet.

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
PHP:
1
<?echo 0123;             // 83echo '0123';           // 0123$bla = 0123;echo strlen($bla);     // 2echo strlen("$bla");   // 2echo strlen('0123');   // 4?>

Ok, die laatste werkt. Maar waarom zou je ins hemelsnaam zo'n statement gebruiken? Kan je net zo goed echo 4; neerzetten. :)

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
PHP:
1
<?echo strlen((string)1234);echo strlen((string)123);echo strlen((string)0123);?>

Al geprobeert? Als dit werkt, staat het nl. wel wat netter dan er ranzige " " omheen beunen ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
ik snap niet wat der mis zou kunnen gaan wat je niet zelf in de hand zou hebben ... maar ik zal wel weer lopen mekkeren :P

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op zaterdag 09 maart 2002 23:55 schreef freak007 het volgende:
PHP:
1
<?echo strlen((string)1234);echo strlen((string)123);echo strlen((string)0123);?>

Al geprobeert? Als dit werkt, staat het nl. wel wat netter dan er ranzige " " omheen beunen ;)
Al geprobeerd.

Bij nader inzien moet ik toch toegeven dat de kans dat je zoiets krijgt behoorlijk klein is, en je eigen schuld is.

Tenzij...
code:
1
test.php?foo=0123


PHP:
1
<?if ( $foo == 0123 ) echo 'Probleem.';if ( $foo == '0123' ) echo 'No problemo.';?>

...want in het eerste geval zou user input dan voor probs kunnen zorgen.

* Ericston heeft geen zin om dit te testen... :)

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Punt was eigenlijk dus alleen dat PHP octale (en ook hexadecimale, maar dat is moeilijker om fout te doen: 0x99) automatisch omzet naar decimale getallen.

* Ericston is done now. :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
postvars zijn altijd stings .. omdat $QUERY_STRING nou eenmaal een string is :P

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op zondag 10 maart 2002 00:03 schreef Grum het volgende:
postvars zijn altijd stings .. omdat $QUERY_STRING nou eenmaal een string is :P
Bedankt Grum, 'nuff said. :) (Voor GET's geldt hetzelfde denk ik?)

* Ericston had in een opwelling opeens zin om een semi-technisch [PHP] draadje te openen, verexcuseer me.

Volgende keer meer hoogstaande lectuur van mij. :P

  • Grum
  • Registratie: Juni 2001
  • Niet online
moet ik het wel goed zeggen

GET vars zijn altijd strings omdat $QUERY_STING dat nou eenmaal is

POST vars zijn altijd strings omdat $HTTP_RAW_POST_DATA dat nou eenmaal is

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
M.i. is het feit dat je in PHP de quotes om strings weg kan laten een grote bug. Ik hoop dat 't er in de toekomst uitgaat. Het is de meest ranzige language construct die ik ooit ben tegengekomen. :r

Moraal: een fatsoenlijk programmeur zet quotes om z'n strings.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 10 maart 2002 01:19 schreef Soultaker het volgende:
M.i. is het feit dat je in PHP de quotes om strings weg kan laten een grote bug.
Huh?

Wakey wakey :)

'blaat' = string
'1234' = string
1234 = integer ...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Op zondag 10 maart 2002 01:27 schreef ACM het volgende:
Wakey wakey :)

'blaat' = string
'1234' = string
1234 = integer ...
blaat = string

Dus men denkt:
strlen(O1234) == strlen(01234) == 5

En zo werkt het dus niet!

Als je verplicht bent een string van quotes te voorzien, zal je niet zo snel vergeten dat er conversie optreedt, en dat strlen toegepast op een integer dus niet het verwachte antwoord oplevert als die integer niet-decimaal of met leading zeros genoteerd wordt.
Moet ik nou echt alles driemaal herkauwen voordat het duidelijk is?

  • Grum
  • Registratie: Juni 2001
  • Niet online
je bent het sowieso 'verplicht' alleen zijn er te weinig mensen die coden onder error_reportig(E_ALL);

  • windancer
  • Registratie: Maart 2000
  • Laatst online: 08-09 01:06
PHP beheers ik niet maar vanuit als je op een of andere manier de logaritme kunt nemen kan je het aantal cijfers in getal x uitgedrukt in basis y uitrekenen door

log(x)/log(y)

naar boven af te ronden.

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Zo dus:
PHP:
1
<?function numlen($num, $base = 10)    // Standaard decimaal.{    return floor( log10($num) / log10($base) + 1 );}?>

Blijft natuurlijk het probleem dat PHP octale getallen automagisch omzet naar decimale getallen. :(

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Oeps.

Verwijderd

Moest je het niet naar boven afronden dan... ?

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op zondag 10 maart 2002 14:04 schreef zellufs het volgende:
Moest je het niet naar boven afronden dan... ?
Ik doe nu eerst +1 en rond dan af naar beneden om het bovenste te voorkomen:
PHP:
1
<?echo log10(10) / log10(10);                // 1echo ceil( log10(10) / log10(10) );        // 1echo ceil( log10(11) / log10(10) );        // 2// Zo gaat het beter:echo log10(10) / log10(10) + 1;            // 2echo floor( log10(10) / log10(10) + 1 );   // 2echo floor( log10(11) / log10(10) + 1);    // 2?>

  • Grum
  • Registratie: Juni 2001
  • Niet online
grappig hoe een onzinnige vraag in zo'n ziek lang topic kan eindigen :)

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op zondag 10 maart 2002 14:39 schreef Grum het volgende:
grappig hoe een onzinnige vraag in zo'n ziek lang topic kan eindigen :)
:'(
En 't is niet eens mijn vraag.
But that's a good thing, right? :)
Pagina: 1