[php]te groot getal voor int (wetenschapenlijke notatie)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik ben bezig met een applicatie die het mogelijk maakt incasso cli bestanden aan te maken,.

Voor interpay is het verplicht dat er aan het einde van het bestand staat wat de waarde is van alle rekeningnummers + bij elke nummer het rekening nummer van de ontvanger.

dus:
code:
1
rek_totaal=rek_totaal+rek_ontvanger;

nu wordt de waarde in rek_totaal zo groot dat deze wordt omgezet naar een wetenschappelijke notatie.

Ik wil dat niet want dat mag niet van interpay.

Ik heb zitten zoeken maar kom er niet uit. Ik zie dat het datatype double (gettype) is maar het lukt mij niet om die te verdubbelen ofzoiets. zodat de normale notatie waarde wel goed is,.

Ik kom er niet meer uit. Ook even hier gekeken http://gathering.tweakers...nschappelijke,notatie,php

maar daar werd ik ook niks wijzer van |:(

kent iemand het probleem? :?

Jochemmol


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je zou naar numberformat kunnen kijken, maar als de bedragen echt groot zijn heb je bij php niet meer de garantie over of er wel of geen floating points gebruikt worden. Hierdoor zou het kunnen komen dat er teveel afgerond wordt. Eventueel zou het te overwegen kunnen zijn om naar BCMath te kijken.

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!

Verwijderd

Je kan denk ik het beste naar de BCMath of GMP libraries kijken.

Acties:
  • 0 Henk 'm!

Verwijderd

mss moet je gewoon met strings werken?
of moet je berekeningen kunnen uitvoeren op die nummers? verder zitten daar meestal toch ook '-'tekens in enz? moet je dan niet zowieso met strings werken?

Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Bedankt voor de hulp.

Ik los het op met number_format

dus:
PHP:
1
2
// 0 voor geen decimalen, '' voor geen punt gebruikeren en '' voor geen komma bij duizenden
echo number_format($nummer,0,'','');


:7

Jochemmol


Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Een lelijke manier in PHP die mogelijk moet zijn is dat je het inderdaad naar strings omzet.

Ff snel, zoiets?:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function tel_huge_nummers_op(string a, string b)
{
   $a = draai_om($a); $b = draai_om($b);
   $c = '';
   $over = 0;
   for($i = 0; $i < max(strlen($a), strlen($b); $i++)
   {
      $test = $over;
      if($i >= strlen($a))
         $test += $b[$i];
      elseif($i >= strlen($b))
         $test += $a[$i];
      else
         $test += $a[$i] + $b[$i];
      
      if($test > 9)
      {
         $test -= 10;
         $over = 1;
      }
      $c .= $test;
      $over = 0;
   }
   return draai_om($c);
}
function draai_om(string a)
{
   $b = '';
   for($i = 0; $i < strlen($a); $i++)
      $b .= $a[strlen($a) - $i];
   return $b;
}

[ Voor 4% gewijzigd door Jurgle op 27-01-2006 15:21 ]

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • Jerry
  • Registratie: September 2001
  • Laatst online: 09-04-2022

Jerry

Who?

Jurgle schreef op vrijdag 27 januari 2006 @ 14:55:
Een lelijke manier in PHP die mogelijk moet zijn is dat je het inderdaad naar strings omzet.

Ff snel, zoiets?:
PHP:
1
/* code */
Daar hebben ze ook settype() voor:
PHP:
1
settype($foo, "string");

[ Voor 49% gewijzigd door Jerry op 27-01-2006 15:47 ]

Specs
Youtube celebrity
D3 Crusader


Acties:
  • 0 Henk 'm!

Verwijderd

Jochemmol schreef op vrijdag 27 januari 2006 @ 13:30:
Ik ben bezig met een applicatie die het mogelijk maakt incasso cli bestanden aan te maken,.

Voor interpay is het verplicht dat er aan het einde van het bestand staat wat de waarde is van alle rekeningnummers + bij elke nummer het rekening nummer van de ontvanger.

dus:
code:
1
rek_totaal=rek_totaal+rek_ontvanger;

nu wordt de waarde in rek_totaal zo groot dat deze wordt omgezet naar een wetenschappelijke notatie.

Ik wil dat niet want dat mag niet van interpay.

Ik heb zitten zoeken maar kom er niet uit. Ik zie dat het datatype double (gettype) is maar het lukt mij niet om die te verdubbelen ofzoiets. zodat de normale notatie waarde wel goed is,.

Ik kom er niet meer uit. Ook even hier gekeken http://gathering.tweakers...nschappelijke,notatie,php

maar daar werd ik ook niks wijzer van |:(

kent iemand het probleem? :?
Moet het perse PHP zijn ?
Ik heb zoiets dergelijks ook al eens gemaakt (simpele tool om van CSV CLIIEOP03 bestanden te maken). Dit weekend wordt het nog uitgebreid.

Acties:
  • 0 Henk 'm!

Verwijderd

Er is ook een PEAR module voor clieop bestanden te maken misschien kun je daar ook eens in spieken. (ooit eens voor een klant gebruikt.)

http://pear.php.net/packa...Clieop/ClieopPayment.html

[ Voor 26% gewijzigd door Verwijderd op 27-01-2006 16:04 ]


Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Jerry schreef op vrijdag 27 januari 2006 @ 15:47:
[...]


Daar hebben ze ook settype() voor:
PHP:
1
settype($foo, "string");
Nee, settype is alleen voor het casten, om vervolgens te 'rekenen met strings' is geen functie voor in PHP.

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • Jerry
  • Registratie: September 2001
  • Laatst online: 09-04-2022

Jerry

Who?

Jurgle schreef op zaterdag 28 januari 2006 @ 09:39:
[...]

Nee, settype is alleen voor het casten, om vervolgens te 'rekenen met strings' is geen functie voor in PHP.
Ik bedoelde ook alleen het omdraaien wat hij deed via de functie: draai_om ;). Had ik er eigenlijk effe bij moeten zetten voor de duidelijkheid.

Specs
Youtube celebrity
D3 Crusader


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Vergeet overigens ook niet dat je alleen de laatste 10 cijfers nodig hebt, mocht het getal erg groot worden ;)
Pagina: 1