Работа с число, имащо хем запетая, хем точка в него

Illusion

Registered
Здравейте.

Наложи ми се да запиша числото „1,546.0“ в базата данни така, както е, обаче то реално се записа като 1… Въпроса ми е как да запиша цялото число, както си е — 1,546.0? Полето, в което се записва то е INT, но като го направя примерно VARCHAR или просто TEXT, пак си се записва като единица.
 
Промени полето в БДто на varchar и си провери като го взимаш в скрипта ти как го взимаш, да не би там да го правиш int.
 
Radko каза:
Промени полето в БДто на varchar и си провери като го взимаш в скрипта ти как го взимаш, да не би там да го правиш int.
Числото идва от тук (hoursOnRecord по-конкретно). Не го променям с никаква функция — добавям го към базата данни така, както ми е предоставено „уж“. Предоставя ми се като 1,546.0, но пък се добавя като единица.
 
Illusion каза:
Radko каза:
Промени полето в БДто на varchar и си провери като го взимаш в скрипта ти как го взимаш, да не би там да го правиш int.
Числото идва от тук (hoursOnRecord по-конкретно). Не го променям с никаква функция — добавям го към базата данни така, както ми е предоставено „уж“. Предоставя ми се като 1,546.0, но пък се добавя като единица.

Я все пак дай частта от кода където го взимаш от хмл-а и заявката за инсерт.
 
Не, защото числото не е нито дабъл нито флоат има и точка и запетайка. Трябва да е или варчар или текст
 
Radko каза:
Не, защото числото не е нито дабъл нито флоат има и точка и запетайка. Трябва да е или варчар или текст

Според мен е добре да махне запетаята и да си запише числото като число.
 
StormBreaker каза:
Radko каза:
Не, защото числото не е нито дабъл нито флоат има и точка и запетайка. Трябва да е или варчар или текст

Според мен е добре да махне запетаята и да си запише числото като число.

Така е. Но това не променя факта че някъде се губят и запетайката и точката и записва само единицата.

Според мен е в скрипта, затова нека автора го даде да хвърлим един поглед.
 
Radko каза:
StormBreaker каза:
Radko каза:
Не, защото числото не е нито дабъл нито флоат има и точка и запетайка. Трябва да е или варчар или текст

Според мен е добре да махне запетаята и да си запише числото като число.

Така е. Но това не променя факта че някъде се губят и запетайката и точката и записва само единицата.

Според мен е в скрипта, затова нека автора го даде да хвърлим един поглед.
Записва го като 1 само защото:
1. Tипа на полето е INTEGER.
2. Запетайката не е разделител.
Най адекватното решение би било да се премахне напълно запетайката и типа на полето да се смени на FLOAT/DOUBLE.

В случая 1,546.0 ще бъде 1546.0 и ще са абсолютно еднакви в контекста.
 
eLite каза:
Radko каза:
StormBreaker каза:
Според мен е добре да махне запетаята и да си запише числото като число.

Така е. Но това не променя факта че някъде се губят и запетайката и точката и записва само единицата.

Според мен е в скрипта, затова нека автора го даде да хвърлим един поглед.
Записва го като 1 само защото:
1. Tипа на полето е INTEGER.
2. Запетайката не е разделител.
Най адекватното решение би било да се премахне напълно запетайката и типа на полето да се смени на FLOAT/DOUBLE.

В случая 1,546.0 ще бъде 1546.0 и ще са абсолютно еднакви в контекста.

но като го направя примерно VARCHAR или просто TEXT, пак си се записва като единица.
 
Е, взимаш го като стринг, а не можеш да го запишеш като стринг ? WTF.


PHP:
<?php

#връзка към базата данни


$xml = file_get_contents("http://steamcommunity.com/profiles/76561198051630640/games/?xml=1");

#не ми се занимаваше с XML затова го изкарах с preg_match()
preg_match("#<hoursOnRecord>(.*?)<\/hoursOnRecord>#", $xml, $out);

#вкарвам в типове text, varchar, int, float
$insert = mysql_query("INSERT INTO `test` (`text`, `varchar`, `integer`, `float`) VALUES ('{$out[1]}', '{$out[1]}', '{$out[1]}', '{$out[1]}')") or die(mysql_error());

if($insert)
	echo "Complete!";
else
	echo "Incomplete!";

?>

Резултат:
5318826p.jpg
 

Горе