We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

Ułamki do MySQL-a przez PHP


qatro
18-01-2007, 12:27
Dzieki za pomoc, w miedzyczasie doszedłem do sedna sprawy.
Problem tkwił w tym że nie podałem dla FLOAT parametrów. Dałem mu 5,2 i widze ułamki tak jak chciałem.
Wieeelkie dzięki za dalsze sugestie dotyczące obliczeń, zaoszczędzi mi to brnięcia w slepą uliczkę, no i mam wytyczony kierunek właściwy.
pozdrawiam

mariano
18-01-2007, 11:36
Kod:
'(double)$tablica[2]'
To nie wyglada najlepiej. Lepiej zrob konwersje wczesniej:

Kod:
$cena = (double)$tablica[2];
$wstaw = ... '$tablica[1]', '$cena'
Jaki ostatecznie wybrales typ sql dla kolumny z cena? Mam nadzieje, ze wiesz, ze nie powinno sie uzywac typow float, double, etc. do obliczen "ksiegowych" (np. do przechowywania i obliczania cen produktow). Dotyczy to sql, php i wszystkich jezykow programowania. Operacje zmiennoprzecinkowe sa tak zaimplementowane w procesorze, ze czasami moga pojawic sie bardzo przykre niescislosci:

Kod:
$ python
Python 2.5 (r25:51908, Jan 12 2007, 22:28:35) 
[GCC 3.4.6] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1.0 - 0.1
0.90000000000000002
Ciekawy wynik. Do przechowywania cen uzywaj typu NUMERIC albo DECIMAL (zob. http://www.mysql.org/doc/refman/4.1/...ng-types.html). Np. create table foo (cena numeric(11, 4));

qatro
18-01-2007, 11:13
Witam, może sprawa jest prosta ale nie moge wstawić przez skrypt PHP do MySQL ułamków. Ręcznie w phpMyAdmin da sie normalnie wpisać każdą liczbę, a jak chcę wstawić dane z pliku tekstowego to wchodzą mi jakieś dziwne wartości (albo 0.999 albo liczby całkowite jak zmienię w tabeli typ na INT). Próbuje zmieniać typy danych, (dałem FLOAT, dałem DOUBLE i nic) zamieniam w tym pliku z danymi przecinki na kropki i też nic. Może ktoś to potrafi i mnie oświaci bo już drugi dzień to wałkuję i nijak nie idzie...

Tak wygląda fragment "plik4.txt"

6 * siatka z wł szklanego *2.37
7 * tynk ATLAS cermit SN 15/00 biel3 *25.55
8 * atlas szop *10.90

a tak kawałek skryptu

$plik = file('plik4.txt'); //wczytuje plik
$ilość = COUNT($plik);
$tablica = array(0=>' ');

for ($i = 0; $i < $ilość; $i++)
{
$tablica = split("[*]", $plik[$i]); //rozbija wiersz
echo $tablica[0].' * '; echo $tablica[1].' * '; echo $tablica[2];
echo '
';
$wstaw = "INSERT INTO towary (id_tow, nazwa_tow, cena) VALUES ('$tablica[0]', '$tablica[1]', '(double)$tablica[2]')";
$results = mysql_query($wstaw) or die(mysql_error());

}
?>