Gå til innhold

[Løst] Javascript - hvordan bruke store tall som argument?


Anbefalte innlegg

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 av - mOtz^ -
Lenke til kommentar
Videoannonse
Annonse

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

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 av - mOtz^ -
Lenke til kommentar

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...