FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Hej!
Har stött på detta udda problem länge, men har inte lagt någon tid på att fixa det. Jag antar att det har med $_POST att göra, en $variabel = 11111111; har i princip ingen maximal längd så.. Varför detta tal som max? 214 748 3647? Högre tal än så, skickade via en form ($_POST) blir nertrubbade till just det talet. En lösning på detta vore toppen! |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Flitig postare
|
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Det låter dock konstigt att php skulle skicka värdena som integers. Det låter faktiskt snarare som någon slags javascripts check som går snett. PHP skiter rätt högaktningsfullt i typningen och skickar allting som strängar mig veterligen.
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Supermoderator
|
Om du skriver ut informationen du tagit emot, har den minskat då?
__________________
Jonny Zetterström se.linkedin.com/in/jonnyz | bjz.se | sajthotellet.com | kalsongkungen.se | zretail.se | zetterstromnetworks.se | webbhotellsguide.se | ekonominyheter24.se | nyamobiltelefoner.se | gapskratt.se | antivirusguiden.se | jonny.nu |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Bara ett inlägg till!
|
Eftersom PHP sätter typerna automatiskt tas strängen med decimaltalet emot som ett heltal. Oavsätt om du kan få PHP att lagra integers större än 32 bitar (vet inte om det går men jag skulle inte tro det) bör du ställa dig frågan om du verkligen vill pyssla med det. Det är enormt stora tal det handlar om så min magkänsla säger att du försöker göra något som inte är riktigt vettigt.
|
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Citat:
![]() signed 32 bit int. Frågan är varför den väljer att göra så, php kan ju hålla större tal än så. Läser man lite där så märker man ju att google hade samma problem, men det är ju löst nu när man söker. Och vad jag vet så går det inte att själv sätta typer? ![]() Grejen är att problemet uppstår när folk i mitt spel vill överföra pengar till varandra. Därför är det ganska viktigt om det går att hitta någon lösning. Som sagt har jag inte kikat riktigt på problemet, jag ska jonnys tips och ta reda på vart det blir trimmat. Men det behövs fortfarande en lösning :blink: |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Mycket flitig postare
|
Citat:
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:
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) ![]() |
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Först och främst, tack för ditt svar Martine. Det var mycket givande och jag ska se till att sätta typer på mina int...
Jag har aldrig sett förrut att man kunde sätta typer på sina variabler, det var nytt för mig. Men var dag lär man sig ju alltid något nytt? ![]() Grekiska drachmer skulle kunna vara en bra jämförelse ![]() Problemet har uppstått på senare tid när ekonomin har skjutit i höjd i mitt spel. Något obalanserat av mig från början, men inget jag kan göra åt nu, mitt upp i spelets runda tyvärr. Tack ännu en gång, det här lär lösa mitt problem. |
||
![]() |
![]() |
Svara |
|
|