Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] problem z konwertwaniem zmiennej string
kroghot
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
kroghot
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


właśnie nie jest ok:

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


daje nam to:

0
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
kroghot
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
carbolymer
post
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 12
Dołączył: 27.01.2007
Skąd: north              Poziom: 158                     Tytuł: Miszcz

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
kroghot
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kicok
post
Post #8





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Kicok 14.01.2008, 15:58:16
Go to the top of the page
+Quote Post
kroghot
post
Post #9





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kicok
post
Post #10





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
kroghot
post
Post #11





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


LOL już wiem co tam siedzi (IMG:http://forum.php.pl/style_emoticons/default/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"
Go to the top of the page
+Quote Post
AxZx
post
Post #12





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $zm = '<td class="quot0up" align="right"><b>-2.009</b></td>';
  3. $zm = strip_tags($zm);
  4. echo $zm;
  5. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:53