- mOtz^ - Skrevet 22. januar 2013 Del Skrevet 22. januar 2013 (endret) Si at jeg kaller en javascript-metode fra html slik: <script type="text/javascript">get_album(56933248870, 10151201924273871)</script> Her er det to store tall som blir satt som argument. For å gjøre det enkelt, så ser metoden slik ut: function get_album(A, B) { alert(A); alert(B); } Her er problemet: Det virker som javascript har en begrensning for høye tall. Argument A blir skrevet ut på riktig måte, men argument B (som er et ekstra høyt tall) blir alltid enten avrundet, eller høynet. I mitt siste tilfelle ble B skrevet ut som tallet: 10151201924273872 Er det slik at javascript ikke kan behandle for høye tall? Og hvordan fikser jeg dette isåfall? Endret 22. januar 2013 av - mOtz^ - Lenke til kommentar
etse Skrevet 22. januar 2013 Del Skrevet 22. januar 2013 Javascript støtter ikke store tall uten videre. Men det finnes løsninger med tilleggsbiblioteker som gjør dette for deg. De lager en egen "BigNumber"-klasse som du kan sende inn som argument i stede, som vil ha verdien din. Det er et svar på stackoverflow med noen gode linker her: http://stackoverflow.com/questions/4288821/how-to-deal-with-big-numbers-in-javascript Lenke til kommentar
OJodd Skrevet 22. januar 2013 Del Skrevet 22. januar 2013 I dette tilfellet så takler javascript tallet ditt, men alle tall i javascript lagres som flyttall, og når tall blir over en viss størrelse så blir de avrunnet til det nærmeste tallet javascript klarer å uttrykke. Trenger du å bruke tallet, eller er det bare en referanse du sender for eksempel til en server? i så fall kan du bare sende det inn som en tekst istedenfor et tall, så slipper du å gå omveien om bibliotek som BigInt Lenke til kommentar
- mOtz^ - Skrevet 22. januar 2013 Forfatter Del Skrevet 22. januar 2013 (endret) Hmm, jeg har prøvd meg litt videre nå, og er litt usikker på om dette faktisk er problemet. Siden du OJodd sier at tallet skal være mulig å behandle så virker dette rart. Ok, jeg fortsetter litt: Jeg testet litt videre med dette skriptet https://github.com/p...n/BigInteger.js Planen er at jeg skal hente en ID til et album vha PHP. Deretter kaller jeg funksjonen get_album, med denne IDen + en annen ID som er statisk (argument A). Koden min ser slik ut: <?php echo "Utskrift 1: " . $row['id']; ?> <script src="BigInteger.min.js"></script> <script> var album = bigInt(<?php echo $row['id']; ?>); alert("Utskrift 2: " + <?php echo $row['id']; ?>) alert("Utskrift 3: " + album); alert("Utskrift 4: " + album.toJSNumber()); get_album(56933248870, album); </script> I mitt siste tilfelle ligger tallet 10151201924273871 i databasen, og her kommer det som jeg ikke forstår: For utskriftene vil nå se slik ut: Utskrift 1: 10151201924273871 Utskrift 2: 10151201924273872 Utskrift 3: 10151201924273872 Utskrift 4: 10151201924273872 Alle utskrifter gjort av javascript bli altså forhøyet med 1. I andre tilfeller (med andre tall, blir tallene i javascriptet representert på andre måter) Endret 22. januar 2013 av - mOtz^ - Lenke til kommentar
OJodd Skrevet 22. januar 2013 Del Skrevet 22. januar 2013 Uten å få sjekket det akkurat nå, så tror jeg du må pakke tallet ditt i fnutter omtrent som dette: <?php echo "Utskrift 1: " . $row['id']; ?> <script src="BigInteger.min.js"></script> <script> var album = bigInt('<?php echo $row['id']; ?>'); //legg merke til ' før og etter php-snutten </script> Lenke til kommentar
- mOtz^ - Skrevet 22. januar 2013 Forfatter Del Skrevet 22. januar 2013 Uten å få sjekket det akkurat nå, så tror jeg du må pakke tallet ditt i fnutter omtrent som dette: <?php echo "Utskrift 1: " . $row['id']; ?> <script src="BigInteger.min.js"></script> <script> var album = bigInt('<?php echo $row['id']; ?>'); //legg merke til ' før og etter php-snutten </script> Samme feil fortsatt dessverre. Utrolig rart greier! Lenke til kommentar
OJodd Skrevet 23. januar 2013 Del Skrevet 23. januar 2013 Samme feil fortsatt dessverre. Utrolig rart greier! For tall større enn javascripts integer-range (900719925474099) så vil du miste presisjon (fordi javascript behandler alt som flyttall), derfor vil toJSNumber alltid returnere feil tall når du har så store tall som du har. album.toString() vil returnere tallet på rett måte, som du skrev det inn i konstruktoren. Uansett trenger ikke javascript vite om at dette er et tall, for alt javascript vet kan du jo bruke bokstaver som identer, du sender jo uansett kallet til en server som bruker tallet mot databasen? Lenke til kommentar
- mOtz^ - Skrevet 23. januar 2013 Forfatter Del Skrevet 23. januar 2013 .toString() - funksjonen løste problemet! Takk OJodd! Lenke til kommentar
Wattengård Skrevet 24. januar 2013 Del Skrevet 24. januar 2013 Hvis du benytter .toString() før du sender ifra deg tallet så har du en grunnleggende arkitekturfeil i utgangspunktet. Lenke til kommentar
- mOtz^ - Skrevet 25. januar 2013 Forfatter Del Skrevet 25. januar 2013 Hvis du benytter .toString() før du sender ifra deg tallet så har du en grunnleggende arkitekturfeil i utgangspunktet. Hva vil du anbefale istede ChristianW? Lenke til kommentar
Wattengård Skrevet 26. januar 2013 Del Skrevet 26. januar 2013 Hvis tallet ditt er så stort så er det sannsynligvis ikke et løpenummer,da kan du benytte en GUID eller tilsvarende. Eller du kan enkelt og greit behandle det som en streng hele veien. Jeg regner med at du ikke kjører noen aritmetiske operajoner på det men at det kun er en identifikator? -C- Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå