[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись числа с плавающей точкой
юрьич
Здравствуйте.Нужно, что бы в базу sql записывались числа от 0.01 до 9.99.Использую тип поля decimal(10,2) 0.00, но пишутся только целые больше нуля.Если 5.2 то 5.0, если 0.5 то 0.00. Как быть?
SlavaFr
Я предпологаю, что скрипт который пишет твои цифры в базу передаёт цифры как стринг и при этом использует запятую вместо точки.

То есть если я в децимальное поле запишу : insert into таблица(поле) values('5,5'); то получится в результате, что запишется не 5.50 а 5.00


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
юрьич
Передаёт так

$price = floatval( $_POST['price'] );

И далее $price пошла в запрос.
Undertaker
Почему бы не попробовать тип float, тогда просто надо смотреть, что бы ОБЯЗАТЕЛЬНО число разделяла точка, а не запятая, и будет счастье

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
юрьич
Да пробовал, без разницы. В переменной $price правильное число, но в базу не пишется.
Undertaker
юрьич
Может тогда дело не в типе переменной, а в других багах... Думаю надо попробовать отправить sql-запрос на прямую, если проходит, то дело в соединении с базой

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Миша
Тип переменной перед записью объявить

_____________
Принимаю заказы, писать в ЛС
FatCat
Цитата (юрьич @ 24.05.2016 - 11:04)
Нужно, что бы в базу sql записывались числа от 0.01 до 9.99.

Я бы сделал поле int и писал от 1 до 999, а на выводе делил на 100...

_____________
Бесплатному сыру в дырки не заглядывают...
юрьич
Переменная передаётся как параметр аякса, объявляется непосредственно перед INSERT INTО, так же до передачи в js ф-ции тоже задаётся как ...parseFloat()..., приходит в скрипт правильно, а в ответе запроса INSERT INTО, уже запятая вместо точки. Проблему решил через str_replace(), но хотелось бы понять, в чём дело. И главное на локальном всё работает.
Guest
Говорят, что floatval() зависит от региональных настроек.
Guest
Хотя не, она НЕ зависит от региональных настроек.
Может действительно mysql как-то особо настроена...
Astin
юрьич
Попробуй несколько вариантов

Вариант 1
Как написал FatCat, делаешь поле в таблице тип int, записываешь в бд
целые числа, а на выходе через регулярку делишь на 100 и ставишь точку или
запятую

Вариант 2
Можно так, Делаешь в бд свое поле тип float

Далее создаешь переменную
$price = trim( $_POST['price'] );


Ставишь регулярку на вилидность, что-то типа
if (!preg_match("/^[\d.]+$/", $price)) 
{
echo 'Поле заполнено неправильно. Пример: 2 или 3.4 ';
}

И только потом вносишь в бд
$query = mysql_query("

INSERT INTO `твоя таблица`

SET
//Еще поля которые заносишь в бд

`твое поле` = '"
.floatval($price)."'");


Вариант 3
Люди всегда будут вводить по разному, кто то точку поставит, а кто то запятую
тогда можно сделать так
Можно так, Делаешь в бд свое поле тип varchar(10) или char(10)
Далее создаешь переменную
$price = trim( $_POST['price'] );


Ставишь регулярку на вилидность, что-то типа

if (!preg_match("/^[\d.,]+$/", $price)) 
{
echo 'Поле заполнено неправильно. Пример: 2 или 3.4 или 3,4 ';
}


Ну и записываешь в бд
$query = mysql_query("

INSERT INTO `твоя таблица`

SET
//Еще поля которые заносишь в бд

`твое поле` = '"
.mysql_real_escape_string($price)."'");


Ну вот что то типа такого, потренеруйся, может что другое придумаешь
или что подойдет из выше описанного

_
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.