Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [js] niepoprawne sumowanie/odejmowanie liczb 20-to cyfrowych
Czadus
post 16.04.2009, 07:39:37
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


Witam.

Mam niewielki problem z JS. Otóż mam dwa pola formularza, w które wpisuję liczby 20-to cyfrowe. Następnie do trzeciego pola formularza mam wpisać automatyczną sumę lub też różnicę tych dwóch pól. Wiadomo, muszę te dwa pola sparsować, bo to stringi. I tak też robię, pojawia się jednak problemgdy wpisana liczba jest zbyt duża. Podam przykład:

P1: 00000001
P2: 99999999
S: P2-P1 = 99999998

I to jest ok, ale gdy wpiszę dane:

P1: 00000000000000000001
P2: 99999999999999999999
S: P2-P1 = 100000000000000000000

Czy int nie przechowuje tak dużych liczb?? Czy może przyczyna jest w innym miejscu??

Kod JS:
Kod
function funcSum(nr)
   {
       var zm1 = parseFloat(document.getElementById("pierwszynumer").value, 10);
       var zm2 = parseFloat(document.getElementById("ostatninumer").value, 10);
       var zm3 = parseFloat(document.getElementById("iloscrecept").value, 10);
      
       switch(nr)
       {
           case 1:
           {
               if(zm1 && zm2)         document.getElementById("iloscrecept").value=(zm2-zm1);
               else if(zm1 && zm3) document.getElementById("ostatninumer").value=(zm1+zm3);
               break;
           }
           case 2:
           {
               if(zm1 && zm2)         document.getElementById("iloscrecept").value=(zm2-zm1);
               else if(zm2 && zm3) document.getElementById("pierwszynumer").value=(zm2-zm3);
               break;
           }
           case 3:
           {
               if(zm1 && zm3)         document.getElementById("ostatninumer").value=(zm1+zm3);
               else if(zm2 && zm3) document.getElementById("pierwszynumer").value=(zm2-zm3);
               break;
           }
       }
      
       return true;
   }


Kod XHTML:
Kod
<table>
       <tbody>
           <tr><td>Pierwszy numer z zakresu</td><td><input type="text" value="" onblur="funcSum(1);" id="pierwszynumer" name="pierwszynumer"/></td></tr>
           <tr><td>Ostatni numer z zakresu</td><td><input type="text" value="" onblur="funcSum(2);" id="ostatninumer" name="ostatninumer"/></td></tr>
           <tr><td>Ilość recept</td><td><input type="text" value="" onblur="funcSum(3);" id="iloscrecept" name="iloscrecept"/></td></tr>
           <tr><td>Nazwa świadczeniobiorcy</td><td><input type="text" value="" name="swiadczeniobiorca"/></td></tr>
           <tr><td><input type="submit" value="dalej" name="dalej2"/></td><td/></tr>
       </tbody>
   </table>


Proszę o rady, pomoc, sugestie
Go to the top of the page
+Quote Post
osl
post 16.04.2009, 13:45:51
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

Ostrzeżenie: (0%)
-----


na początku witam, jako że to mój pierwszy post tutaj winksmiley.jpg

Int w JS zdaje się obsługuje -2^31 do 2^31-1, względnie 2^32-1, czyli odrobinę z zakresu liczb 10-cio cyfrowych...
także musisz znaleźć inne rozwiązanie.

mi na szybko przychodzą do głowy tylko metody rodem z C, może ktoś bardziej 'naumiany' JS zna lepszy sposób na to...
Go to the top of the page
+Quote Post
erix
post 16.04.2009, 15:48:51
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://lmgtfy.com/?q=big%20numbers%20js


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Czadus
post 16.04.2009, 15:50:54
Post #4





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


Ja tutaj zastanawiam się nad rozbiciem całości na dwie części, czyli zamiast 20-to cyfrowej liczby, mieć dwie 10-cio cyfrowe. O przekroczeniu zakresu też myślałem, tylko nie zdawałem sobie sprawy, że js pod tym względem jest tak ograniczony.

A jaki masz sposób rodem z C?? Mam trochę styczności z programowaniem, więc śmiało możesz zapodać. Jeżeli nie na forum (jeszcze ktoś posądzi o pisanie nie na temat), to na PW.
Go to the top of the page
+Quote Post
osl
post 16.04.2009, 15:53:17
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

Ostrzeżenie: (0%)
-----


sposób zupełnie na piechote - implementacja najzwyklejszego dodawania pisemnego.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:53