Citat:
Originally posted by kullervo@Dec 15 2006, 22:02
Eftersom PHP sätter typerna automatiskt tas strängen med decimaltalet emot som ett heltal.
|
Fel. Allt som kommer med $_GET eller $_POST kommer som en "oförstörd" sträng, precis som den skickas i HTTP-requesten.
Om du tittar på det inkommande värdet med t ex var_dump så får du:
string(30) "234623463452346352345675472634"
Det finns alltså ingen begränsning för hur stora tal du kan skicka till php.
(omvandling sker först när man försöker använda det aritmetiskt och inte som sträng)
Däremot har alla programmeringsspråk i slutändan någon gräns för hur stora tal och med hur stor precision man kan använda. För heltal (int) med full precision gäller i php den gräns som det underliggande systemet har. PHP har inga fastlagda gränser som t ex Java för hur stor en int ska vara. Ofta är det 32 bitar som ger ett ganska litet tal. Allt som är över värdet 2147483647 tilldelas då detta värde eftersom det är det största 32-bits värdet. En del varianter av PHP har 64 bitars int vilket ger värden upp till 9223372036854775807.
Citat:
Och vad jag vet så går det inte att
själv sätta typer?
|
Klart det går! Med (typ)$variabel sätter du alla php:s typer.
sAe: Om du vill få ut något vettigt ur så stora tal så får du antingen:
1. om du inte behöver så stor precision så kan du använda
float genom att "typ-kasta":
$num = (float)$_POST['num'];
(vilket ger t ex float(2.3462346345235E+29) med talet överst) detta kan du sedan addera etc som vanligt. Då kan du ju skriva typ "Du har nu 114 miljarder" och slipper räkna med 9 nollor extra.
2. skriva egna funktioner som med t ex substr etc delar upp heltalssträngen och gör beräkningar och sedan lämna tillbaka talet som en sträng igen.
3. se efter om det finns någon modul (eller utveckla en själv) till php för typ vetenskapliga beräkningar etc där stora tal med hög precision är möjlig.
Rimligast tycker jag nog kanske det vore om du övergick till någon enklare lösning om det bara gäller ett spel! Använder du grekiska drachmer?? B)