Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Запись числа с плавающей точкой
юрьич  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 163
Пользователь №: 35076
На форуме: 4 года, 2 месяца, 29 дней
Карма:




Здравствуйте.Нужно, что бы в базу sql записывались числа от 0.01 до 9.99.Использую тип поля decimal(10,2) 0.00, но пишутся только целые больше нуля.Если 5.2 то 5.0, если 0.5 то 0.00. Как быть?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 5 дней
Карма: 104




Я предпологаю, что скрипт который пишет твои цифры в базу передаёт цифры как стринг и при этом использует запятую вместо точки.

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


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
юрьич  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 163
Пользователь №: 35076
На форуме: 4 года, 2 месяца, 29 дней
Карма:




Передаёт так

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

И далее $price пошла в запрос.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Undertaker  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 312
Пользователь №: 31230
На форуме: 4 года, 10 месяцев, 13 дней
Карма:




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


--------------------
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
юрьич  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 163
Пользователь №: 35076
На форуме: 4 года, 2 месяца, 29 дней
Карма:




Да пробовал, без разницы. В переменной $price правильное число, но в базу не пишется.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Undertaker  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 312
Пользователь №: 31230
На форуме: 4 года, 10 месяцев, 13 дней
Карма:




юрьич
Может тогда дело не в типе переменной, а в других багах... Думаю надо попробовать отправить sql-запрос на прямую, если проходит, то дело в соединении с базой


--------------------
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Медведь  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2482
Пользователь №: 37963
На форуме: 3 года, 3 месяца, 26 дней
Карма: 27




Тип переменной перед записью объявить


--------------------

Заходил 29.09.2016
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5909
Пользователь №: 1
На форуме: 10 лет, 10 месяцев
Карма: 125

Не пью :
22 года, 3 месяца


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

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


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
юрьич  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 163
Пользователь №: 35076
На форуме: 4 года, 2 месяца, 29 дней
Карма:




Переменная передаётся как параметр аякса, объявляется непосредственно перед INSERT INTО, так же до передачи в js ф-ции тоже задаётся как ...parseFloat()..., приходит в скрипт правильно, а в ответе запроса INSERT INTО, уже запятая вместо точки. Проблему решил через str_replace(), но хотелось бы понять, в чём дело. И главное на локальном всё работает.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Говорят, что floatval() зависит от региональных настроек.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Хотя не, она НЕ зависит от региональных настроек.
Может действительно mysql как-то особо настроена...
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 24 дня
Карма: 7




юрьич
Попробуй несколько вариантов

Вариант 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)."'");


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

_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса