2013-09-26 20 views
5

Qual è lo scopo principale del limite massimo per il numero in php e mysql?
Ciò significa che possiamo/non possiamo elaborare o memorizzare numeri che sono più grandi del limite?scopo del numero massimo in php & mysql

I echo PHP_INT_MAX e mostra 2147483647.

Mi moltiplicare per 1000000000000000000000 e ottenere risposte come 2.147483647E+30 che penso sia già oltre il limite?

Si prega di avvisare.

Molte grazie per l'orientamento.

Questa domanda sorge quando sto pensando di convalidare l'input del modulo utente. Voglio assicurarmi che l'input dell'utente sia conforme al nostro formato numerico definito e non a qualcos'altro.
Quindi eseguo una ricerca online per le best practice e viene a conoscenza di questi "limiti" ma non so come gestirlo correttamente quando si utilizza PHP & MYSQL. Pls consiglia:

Passaggio 1: tagliare e convertire il modulo di immissione dell'utente "numero di stringa" in numero.
Passaggio 2: verificare che il numero sia in formato intero positivo.
Passo 3: convalidare il numero non superi il mio "limite massimo".
Poiché il limite di php (2.147.483.647) è inferiore al limite di mysql (18.446.744.073.709.500.000)? prenderò php come limite massimo.
Passaggio 4: eseguire alcuni calcoli ...
Passaggio 5: convalidare il risultato non supera il limite massimo.
Passaggio 6: memorizzare il risultato in mysql.

+0

Quale numero limite? Vuoi dire, ad esempio, che una variabile intera può contenere solo numeri ad un certo valore? – michaelward82

+0

Lo scopo è quello di riempire meno byte. Un minuscolo non firmato è lungo solo 8 bit (1 byte), e il suo valore più alto è solo 255 (11111111), mentre più byte usiamo, maggiore è la memoria che usiamo. – h2ooooooo

+0

È perché i numeri sono tipicamente memorizzati come numeri interi o float firmati/non firmati a 32 o 64 bit, quindi sono limitati dal numero di bit utilizzati per memorizzarli –

risposta

3

È il limite hardware della CPU. È ancora possibile utilizzare la funzione bc math per lavorare con numeri più grandi. In mysql si tratta di allineare i byte, quindi sa a quale offset è quale colonna.

Il risultato di moltiplicazione viene convertito in float.

1

PHP_INT_MAX è la costante del più grande integer che è possibile utilizzare su questa build di PHP (32 bit nel proprio caso). Se il tuo SO e CPU supportano 64 bit, puoi usare una build di PHP a 64 bit per supportare un numero molto più grande in un numero intero. (Questo fa sì che i problemi in cui gli sviluppatori hanno progettato il loro codice in giro i limiti di un 64 bit di compilazione e viene poi utilizzato su 32 bit costruisce, assumendo le questioni di tipo.)

Quando si moltiplica il numero da uno più grande, PHP riconosce questo il nuovo valore non si adatta a un integer e converte il tipo in long o float. In quest'ultimo caso, si perderebbe una certa precisione, quindi è importante fare attenzione quando si considera il modo in cui il codice influenza i tipi variabili. In alcune lingue, si riceverebbe un errore nel tentativo di impostare un valore maggiore di quello consentito da quel tipo, poiché la lingua rifiuterebbe di cambiare automaticamente il tipo per te. In questo modo, PHP è un linguaggio di programmazione più basilare da utilizzare.

<?php 
$my_number = PHP_INT_MAX; 
var_dump(gettype($my_number), $my_number); 
$my_number = $my_number * 1000000000000000000000; 
var_dump(gettype($my_number), $my_number); 

Output: 
string(7) "integer" 
int(2147483647) 
string(6) "double" 
float(2.147483647E+30) 
0

Nel mondo dei computer, ci sono molti limiti basati sul modello matematico di hardware del computer che usiamo.

Ad esempio, se abbiamo deciso di rappresentare un numero intero di 1 bit di memoria, allora ci sarebbe in grado di rappresentare i numeri 0 e 1.

Se dovessimo aumentare che ai valori più comuni 8, 16, 32 o 64 bits allora possiamo rappresentare il numero di valori distinti:

  • 2^8 - 256,
  • 2^16 - 65,536,
  • 2^32 - 4,294,967,296,
  • o 2^64 - 18,446,744,073,709,551,616.

Ovviamente, se si desidera essere in grado di rappresentare numeri negativi, è possibile firmare il numero intero (utilizzare un bit per indicare negativo o positivo). Nel caso di un 32 bit signed integer questo ci consentirebbe di rappresentare i numeri: −(2^31) a 2^31 − 1 o -2,147,483,648 a +2,147,483,647 (lo stesso limite superiore del numero nella domanda).

I numeri interi sono probabilmente la forma più semplice di rappresentazione numerica in un sistema di computer (oltre il binario diretto), ma a causa dei limiti intrinseci del sistema, spesso dovremo utilizzare altri sistemi per numeri maggiori che non possiamo rappresentare con un numero intero. PHP passerà dall'uso di un intero all'utilizzo di floating point numbers quando il limite viene superato.

Il limite che si sta vedendo in PHP è compilato e dipenderà dall'architettura del compilatore. Sembra che il tuo PHP sia stato compilato come 32 bit.

È possibile leggere molto di più su computer number systems on Wikipedia.

Problemi correlati