ugrás a tartalomhoz

float tizedeselválasztó

Garpeer · 2012. Feb. 27. (H), 13.58
Üdv!

A következő jelenségbe futottam bele:
egy ideje a gépemen (és egyes szervereken) a float értékek tizedesvesszővel elválasztva jelennek meg a tizedespont helyett.

echo 1.3456 // 1,3456
Ez önmagában nem lenne gond, de mikor mondjuk egy számot floattá alakítva rakok adatbázislekérésbe (tudom, nem szabadna) akkor a mysql a vessző miatt csak a tizedesjel előtti részt kapja el. Az igaz, hogy a magyar helyesírási szabályzat szerint a vessző a helyes, csak erről a mysql nem tud.

Ez valami beállítás miatt van, feature, bug?

(A phpm Version 5.3.5-1ubuntu7.7 )
 
1

php dokumentáció

Hidvégi Gábor · 2012. Feb. 27. (H), 14.24
A php dokumentáció ide vonatkozó részeit átolvastad már?
2

számot floattá alakítva Ezt

Poetro · 2012. Feb. 27. (H), 14.25
számot floattá alakítva

Ezt részleteznéd? Mit jelent azt, hogy számot float-tá alakítva? A PHP a számokat belül a megfelelő adatformátumban tárolja, azaz a lebegőpontosokat float-ként, az egészeket int-ként stb.
Ez valami beállítás miatt van, feature, bug?

Én ilyennel még sosem találkoztam, úgyhogy mindenképpen valami beállításbeli probléma lehet vagy valami bug a rendszeredben.
Először is érdemes megnézni, milyen locale-t használ a PHP (setlocale(LC_NUMERIC, 0)), és ezt lenne érdemes módosítani egy olyanra, amiben nincsenek tizedesvesszők, hanem tizedespontok (például setlocale(LC_NUMERIC, 'C')).
3

locale

Garpeer · 2012. Feb. 27. (H), 15.47
A „floattá alakítom” nem volt igazán pontos a megfogalmazás, a sprintf('%f', 1.324)-re gondoltam. És itt már meg is van a megoldás a docban.
%f - the argument is treated as a float, and presented as a floating-point number (locale aware).
%F - the argument is treated as a float, and presented as a floating-point number (non-locale aware). Available since PHP 4.3.10 and PHP 5.0.3.


a setlocale(LC_NUMERIC, 0) szerint a locale 'hu_HU.UTF8', a localeconv szerint meg a decimal_point ',', szóval valóban itt a „hiba”.
Az érdekes az az egészben, hogy 2 hónappal ezelőtt még egészen biztosan tizedesponttal kaptam a floatokat (amelyik query nálam jó volt, a tesztszerveren nem ment), a PHP már akkor is 5.3 volt és azóta nem állítottam localet. De az is lehet, hogy valamit nagyon félrenéztem.

Köszönet a segítségért!