GDRCD 5.2 Denaro bigint
GDRCD 5.2 Denaro bigint postato il 28/03/2015 11:25:42 nel forum programmazione, open source e hosting
Ciao a tutti, ho provato a cercare ma non trovo nulla in proposito.
Vorrei trasformare il campo banca dei personaggi in un bigint, per avere più cifre a disposizione, e modificando la tabella non ho avuto alcun problema.
L'unico problema è che quando vado nella scheda del personaggio e faccio amministra, se provo a mettere un numero più alto di 2147483647 nel campo "denaro in banca" non me lo fa mettere. Presumo sia dovuto al gdrcd_filter, giusto? Come faccio in modo che ci sia un altro filtro num che abbia valori bigint e non int? Spero di essermi spiegato, grazie a tutti in anticipo!
Pagine → 1
28/03/2015 11:35:53
Non sarebbe più comodo trattarlo come fosse una normale stringa e fargli un cast (convertirlo) a bigint solo quando devi farci delle operazioni matematiche sopra?
28/03/2015 13:13:04
anche effettuando il type hinting(mi pare di aver capito così), php ha un limite nella grandezza delle cifre con cui può lavorare, ed è proprio il cifrone che tu stesso hai citato, pur levando il filter, verrebbe automaticamente considerato un numero a virgola mobile di default.
L'unico consiglio che posso darti è di non lavorare con cifre eccessive, ma adattare la tua valuta monetaria in modo tale che non sfori certi limiti...
28/03/2015 16:06:22
darkabe, potrei fare come dici in effetti, ma a quel punto quando faccio operazioni matematiche sopra non trovo lo stesso problema di cui parla soizora?
Forse è effettivamente meglio fare in modo che la moneta sia limitata ai 2 mld ecc.
28/03/2015 17:29:38 e modificato da dyrr il 28/03/2015 17:30:57
L'intero massimo con cui si può lavorare su php dipende da diversi fattori, principalmente se tutto l'insieme di sistema:
Versione di php
sistema operativo
hardware
Sono 32 o 64 bit.
Spesso però il sistema arriva a supportare interi più grandi di quelli a 32 bit.
Ti conviene provare il sistema con un piccolo script come questo
<?php
echo "PHP_INT_SIZE: ".PHP_INT_SIZE."<br />\n";
echo "PHP_INT_MAX: ".PHP_INT_MAX ."<br />\n";
for ($i = 31; $i <= 63; $i++) {
echo "2^".$i." = ". pow(2,$i)."<br />\n";
}
?>
Per esempio testato su altervista lo script mi ritorna:
PHP_INT_SIZE: 4
PHP_INT_MAX: 2147483647
2^31 = 2147483648
2^32 = 4294967296
2^33 = 8589934592
2^34 = 17179869184
2^35 = 34359738368
2^36 = 68719476736
2^37 = 137438953472
2^38 = 274877906944
2^39 = 549755813888
2^40 = 1099511627776
2^41 = 2199023255552
2^42 = 4398046511104
2^43 = 8796093022208
2^44 = 17592186044416
2^45 = 35184372088832
2^46 = 70368744177664
2^47 = 1.4073748835533E+14
[...]
Se il sistema avesse supportato interi a 64 bit avrebbe dovuto restituirmi:
PHP_INT_SIZE: 8
PHP_INT_MAX: 9223372036854775807
Come vedi però il sistema riesce a gestire come interi anche numeri un po' più grossi di 2147483647 ovvero:
2^46 = 70368744177664
Se proprio vuoi andare oltre il PHP_INT_MAX gestito dal sistema su cui è hostato il sito puoi verificare fino a che numero regge, ache se farei delle prove con qualche operazione matematica per vedere se non da effettivamente problemi.
P.S.: A quanto ho letto, ma non verificato su sustemi con windows anche se a 64 bit e php/apache a 64 bit PHP_INT_MAX restituisce lo stesso 2147483647
28/03/2015 17:36:50
Non l'ho detto prima ma lo sto usando in locale con xampp.
Ho provato il test e in effetti mi dà
PHP_INT_SIZE: 4
PHP_INT_MAX: 2147483647
2^31 = 2147483648
2^32 = 4294967296
2^33 = 8589934592
2^34 = 17179869184
2^35 = 34359738368
2^36 = 68719476736
2^37 = 137438953472
2^38 = 274877906944
2^39 = 549755813888
2^40 = 1099511627776
2^41 = 2199023255552
2^42 = 4398046511104
2^43 = 8796093022208
2^44 = 17592186044416
2^45 = 35184372088832
2^46 = 70368744177664
2^47 = 1.4073748835533E+14
2^48 = 2.8147497671066E+14
2^49 = 5.6294995342131E+14
2^50 = 1.1258999068426E+15
2^51 = 2.2517998136852E+15
2^52 = 4.5035996273705E+15
2^53 = 9.007199254741E+15
2^54 = 1.8014398509482E+16
2^55 = 3.6028797018964E+16
2^56 = 7.2057594037928E+16
2^57 = 1.4411518807586E+17
2^58 = 2.8823037615171E+17
2^59 = 5.7646075230342E+17
2^60 = 1.1529215046068E+18
2^61 = 2.3058430092137E+18
2^62 = 4.6116860184274E+18
2^63 = 9.2233720368548E+18
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
World of Tanks ↗
Tibia ↗
Imperion ↗
Raja Dunia ↗
Hero Wars ↗