Jump to content
php.lv forumi

Mistika ar salīdzināšanu


aika

Recommended Posts

Pēkšni mans kods sācis taisīt mistiku: salīdzinot divus variabļus melo! (pirms tam viss bija ok)

Salīdzināts tiek ar '<'

Ja abi mainīgie vienādi - nostrādā kā true!

Uzliku ka abi mainīgie pirmstam tiek apstrādāti ar doublval(); - nepalīdz!

Kas par lietu???!

Link to comment
Share on other sites

Parādi taču kodu, kas tā dara.

 

Un tu 100% pārliecinājies (izdrukājot mainīgo saturu pirms pašas salīdzināšanas), ka mainīgie ir vienādi ?

 

Hmm.. Cik noprotu, tu floatus mēģini salīdzināt ? Varbūt tālakais ko rakstīšu būs pilnīgas muļķības, bet ar floatiem ir tā, ka tie nav precīzi. Tāpēc iespējams, ka izdrukājot viņi ir vienādi, bet salīdzināšanas operātors tomēr vienu no viņiem redz savādāk (neprecīzi, piemēram, 3 vietā 3.00000000000000003 vai ko tādu).

Edited by andrisp
Link to comment
Share on other sites

Parādi taču kodu, kas tā dara.

 

Un tu 100% pārliecinājies (izdrukājot mainīgo saturu pirms pašas salīdzināšanas), ka mainīgie ir vienādi ?

 

jap! pat izķēru abus maniīgos ar javascriptu tieši pirms salīdzināšanas!

Link to comment
Share on other sites

Ieraksti kodu, kurā tas notiek. Ieskaitot tās vietas, kurās mainīgie dabū vērtības.

 

nu kāds tur kods!

ir mainīgais $a un mainīgais $b

$a tiek iegūts kā paramters, kas nodots no citas lapas

$b tiek iegūts no funkcijas

abi parametri tika apstrādāti:

$a = doubleval($a);

$b = doubleval($b);

 

salīdzināšana:

if ($a<$b) {}

Link to comment
Share on other sites

Parādi taču kodu, kas tā dara.

 

Un tu 100% pārliecinājies (izdrukājot mainīgo saturu pirms pašas salīdzināšanas), ka mainīgie ir vienādi ?

 

Hmm.. Cik noprotu, tu floatus mēģini salīdzināt ? Varbūt tālakais ko rakstīšu būs pilnīgas muļķības, bet ar floatiem ir tā, ka tie nav precīzi. Tāpēc iespējams, ka izdrukājot viņi ir vienādi, bet salīdzināšanas operātors tomēr vienu no viņiem redz savādāk (neprecīzi, piemēram, 3 vietā 3.00000000000000003 vai ko tādu).

 

varbūtība itkā varētu pastāvēt, taču šoreiz tā nevare'tu būt:

$a tiek ievadīts inputfieldā un izskatās piem šādi 2.55

$b tiek iegūts no funkcijas kas pie vienas doubles pieskaita otru (piem $b = 2.45 + 0.1);

 

 

pats stulbākais ka tas kods nostrādāja 3 mēnešus, bet vakar sadirsās! (nav bijis pat PC restarts, vai tur tjip reg set maiņa)

Link to comment
Share on other sites

Nu tādā gadījumā viss skaidrs.

Te ir uzraksīta atbilde tavai problēmai: http://php.lv/f/index.php?showtopic=10133&...+neprec%C4%ABzi

Īsumā - peldošā punkta skaitļi atmiņā reprezentējas binārā formā, nevis decimālā. Tāpēc decimālu skaitli ierakstot nevajag gaidīt, ka tas būs vienāds ar citu decimālā pieraksta skaitli.

Link to comment
Share on other sites

Lūdzu nevajag taisīt bezjēdzīgas QUOTEs

 

vo bļins fakstakāds! Moš tad man tieši tos par stringiem pārtaisīt!

enīvei tas neizskaidro kapēc tas viss nostrādāja 3 mēnešus :)

bet paldies par virzienu! nu domāsim kā apčakarēt!

Edited by bubu
Link to comment
Share on other sites

Varbūt vienkārši "pareizas" vērtības padevi. Tb tādas uz kurām paveicās un viss nostrādāja.

 

Par to apčakarēšanu - ja tu operē ar naudas summām, tad kā jau otrā topikā izteicās, dari to ar integer tipiem ar santīmiem (ja diapazons atļauj). Ar floatiem operēt ar naudu ir neprāts, tā nedrīkst.

Link to comment
Share on other sites

Varbūt vienkārši "pareizas" vērtības padevi. Tb tādas uz kurām paveicās un viss nostrādāja.

arī tas tiesa! vakar jau pētīju - un tad jau skatījos ka tas nostrādāja tieši pie 2.55 < 2.45+0.1 :)

Link to comment
Share on other sites

×
×
  • Create New...