FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Supermoderator
|
Jag förväntade mig inte att springa på detta problemet men så blev det. Egentligen så är det inget problem men jag undrar ändå varför det blir som det blir.
Kod:
echo 11103-11103.35; exit; -0.35000000000036 På en av mina webbservrar får jag: -0.35 Det jag undrar över är varför min utvecklingsdator räknar fel. Jag är medveten om att division och multiplikation kan ge decimalproblem för processorer men detta är ju en simpel subtraktion. |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Supermoderator
|
Vad händer om du skriver 11103.0-11103.35?
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Jag tror att det har att göra med vad som står i PHP-manualen:
Citat:
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
Om du kollar phpinfo() och värdet "precision", vad säger det? Eftersom detta direktiv talar om hur många decimaler du hanterar i flyttal.
Kod:
echo (float) 11103 - (float) 11103.35; exit; Citat:
Får jag på min server. |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
; The number of significant digits displayed in floating point numbers.
precision = 12 i php.ini kanske kan ha något med saken att göra? |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Bara ett inlägg till!
|
Citat:
Flyttal är dyrt att räkna och lagra, och därför gör man ofta en approximation. Det skall du alltid ha i minnet när du räknar med decimaler. 1/3 = 0.333333... går t.ex. inte att lagra som ett komplett tal, då de har ett oändligt antal decimaler. Vad man gör är då är att bara ta med ett visst antal decimaler, så kallad precision (se iXams inlägg). Tal som är både stora och små samidigt är extra besvärliga (t.ex. 12343535.000000034323) på grund av det sättet som man lagrar flyttal. |
|||
![]() |
![]() |
Svara |
Ämnesverktyg | |
Visningsalternativ | |
|
|