Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z konwertwaniem zmiennej string
Forum PHP.pl > Forum > PHP
kroghot
witam, mam dziwny problem z konwertowaniem zmiennych string na zmienna float.

Otóż pobieram sobie z innej strony taki kawałek stringa
DJIA 22:04 12 800.26 -2.00

string[1] = DJIA
string[2] = 22:04 12
string[3] = 800.26
string[4] = -2,00

problem jest ze stringieg[4] chce żeby to była liczba zmienno przecinkowa -2.0

najpierw zamieniam przecinek na kropke w taki sposób:
  1. <?php
  2. $string[4] = str_replace(",",".",$string[4]);
  3. ?>


php traktuje to jako liczbe 0 a stringa -2.00

potem robie tak:
  1. <?php
  2. $test1 = settype(floatval($string[4), 'float');
  3. ?>

efekt jest liczba 1

proszę o pomoc jak to naprawić

dodam że potrzebuje to do porównywania i przydzielania kolorów jeśli string[4]>0 kolor czerowny jeśli string[4]<0 kolor zielony w przeciwnym wypadku kolor czarny czcionki.

z góry dziękuje
phpion
Zmienna $test1 przyjmuje wartość 1 gdyż jest to reprezentacja true, a właśnie wartość prawda/fałsz zwraca funkcja settype" title="Zobacz w manualu PHP" target="_manual. Zrób po prostu:
  1. <?php
  2. $test1 = floatval($string[4]);
  3. ?>

i powinno być ok.
kroghot
właśnie nie jest ok:

ten kod:
  1. <?php
  2. $test1 = floatval($string[4]);
  3. echo $test1;
  4. ?>


daje nam to:

0
Kicok
  1. <?php
  2.  
  3. $string[4] = '-2,00';
  4.  
  5. $float = floatval( str_replace( ',', '.', $string[4] ) );
  6. echo $float;
  7.  
  8. ?>


U mnie działa.

Upewnij się, że zmienna $string[4] przechowuje dokładnie "-2,00". Może zawiera jeszcze jakieś śmieci, albo myślnik jest zrobiony przy pomocy &mdash; czy czegoś takiego.
kroghot
hmm, to całkiem możliwe, a jak to sprawdzić czy coś tam jest i ewentualnie zmienić to na liczbę.

Dodam że mam też liczbe 2,00 i tak samo jest wyświetlana jako 0 przy tej konwersji

string[1] = DJIA
string[2] = 22:04 12
string[3] = 800.26
string[4] = 2,00

daje:
  1. <?php
  2. $string[4] = str_replace(",",".",$string[4]);
  3. ?>


potem daje:

  1. <?php
  2. $test1 = floatval($string[4);
  3. ?>


efekt jest:

0

nie mam pojęcie jak to rozgryźć



odświeżam temat bo został bez odpowiedzi
carbolymer
  1. <?php
  2. $string[1] = 'DJIA';
  3. $string[2] = '22:04 12';
  4. $string[3] = '800.26';
  5. $string[4] = '-2,00'; 
  6.  
  7. $string[4] = str_replace(",",".",$string[4]);
  8.  
  9. echo $string[4].'<br/>';
  10.  
  11. $test1 = floatval($string[4]);
  12.  
  13. echo $test1;
  14. ?>

daje efekt:
  1. -2.00
  2. -2


drugie wywołanie:

  1. <?php
  2. $string[1] = 'DJIA';
  3. $string[2] = '22:04 12';
  4. $string[3] = '800.26';
  5. $string[4] = '-2,001'; 
  6.  
  7. $string[4] = str_replace(",",".",$string[4]);
  8.  
  9. echo $string[4].'<br/>';
  10.  
  11. $test1 = floatval($string[4]);
  12.  
  13. echo $test1;
  14. ?>

daje efekt:
  1. -2.001
  2. -2.001


Więc kod jest na 100% dobry, błąd najwyraźniej musi siedzieć gdzie indziej. Sprawdź jeszcze raz moje kody czy u ciebie też dają taki wynik.
kroghot
to działa bez problemu, tylko ja swoje dane zczytuje ze strony i nie wiem czy nie ma tam jakiś śmieci a nie wiem jak to zamienić na faktyczną liczbe. Widoczna string -2.00 może faktycznie być czymś innym i tak jest właśnie po przekonwertowaniu na liczbe
Kicok
No to wyświetl sobie zmienną $string[4] potraktowaną funkcją: trim" title="Zobacz w manualu PHP" target="_manual, htmlentities" title="Zobacz w manualu PHP" target="_manual, strlen" title="Zobacz w manualu PHP" target="_manual czy też:
  1. <?php
  2.  
  3. $string[4] = '-2,00';
  4.  
  5.  
  6. // asciitable.com
  7. echo '<pre>';
  8. for( $i=0, $c=strlen( $string[4] ); $i < $c; ++$i )
  9. {
  10. echo $string[4][$i] . ' - ' . ord( $string[4][$i] ) . "\n";
  11. }
  12. echo '</pre>';
  13.  
  14. ?>


i przeanalizuj wyświetlone informacje.
kroghot
probuje je przeanalizować ale ni jak mi to nie idzie, zobaczcie sami


kod:
  1. <?php
  2. $string[4] = $plik[$t+5];
  3. echo $plik[$t+5];
  4.  
  5.  
  6. // asciitable.com
  7. echo '<pre>';
  8. for( $i=0, $c=strlen( $string[4] ); $i < $c; ++$i )
  9. {
  10. echo $string[4][$i] . ' - ' . ord( $string[4][$i] ) . "\n";
  11. }
  12. echo '</pre>';
  13. ?>



efekt bardzo dziwny:


0.90

- 9
- 9
- 9
- 9
- 9
- 9
- 9
- 9
- 9
- 9
< - 60
t - 116
d - 100
- 32
c - 99
l - 108
a - 97
s - 115
s - 115
= - 61
" - 34
q - 113
u - 117
o - 111
t - 116
0 - 48
u - 117
p - 112
" - 34
- 32
a - 97
l - 108
i - 105
g - 103
n - 110
= - 61
" - 34
r - 114
i - 105
g - 103
h - 104
t - 116
" - 34
> - 62
< - 60
b - 98
> - 62
0 - 48
. - 46
9 - 57
0 - 48
< - 60
/ - 47
b - 98
> - 62
< - 60
/ - 47
t - 116
d - 100
> - 62

- 13

- 10


proszę niech mi ktoś to wyjaśni
Kicok
  1. <?php
  2.  
  3. echo $string[4];
  4.  
  5. ?>


I popatrz się w źródło strony. Oprócz liczby zobaczysz też tagi HTML, białe znaki i inne "śmieci" o których wspominałem wyżej. Teraz możesz poczytać o funkcjach trim" title="Zobacz w manualu PHP" target="_manual i strip_tags" title="Zobacz w manualu PHP" target="_manual
kroghot
LOL już wiem co tam siedzi smile.gif dzięki wielkie

<td class="quot0up" align="right"><b>1.09</b></td>

jest może jakaś funkcja co wyciągnie mi to co jest pomiędzy tymi tagami, bo na chwile obecną wyciągam to funkcją substr() ale ma to swoje minusy bo jak jest liczba -2.00 to jest ok a jak jest 2.00 to już lipa
no i sam napisa class =" to się też zmenia"
AxZx
  1. <?php
  2. $zm = '<td class="quot0up" align="right"><b>-2.009</b></td>';
  3. $zm = strip_tags($zm);
  4. echo $zm;
  5. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.