LinuxForum.Fans
Тема

форматирование чисел в php

Автор: skyinfo 9 сообщений 2281 просмотров
#353391

есть числа (73 983, 960 и т.д) (P.S c пробелом и без)
форматирую так :

text
 str_replace(" ", "", $ThisStr);

вывод без пробела, такой какой и нужен. echo "$CleatStr"; = 73983
завожу в базу:
структура столбца: VARCHAR/64, дефлота нет, utf8_general_ci

text
'".str_replace(" ", "", $data->sheets[0]['cells'][$i][2])."'

а в базу почему то входит вот так - 73,983 ( с запятой)
а нужно просто вот так:

text
73983

подскажите как быть?

#353841

не совсем понял из манов, как можно форматнуть значения с помощью установки локали. (может я чет не понимаю).
на входе в базу стоит utf8

@mysql_query('set character_set_client="utf8"');
@mysql_query('set character_set_results="utf8"');
@mysql_query('set collation_connection="utf8_general_ci"');

может кто разжует, уже измучался, в базу лезут кривые значения.

с числами до 1к можно бороться просто округляя, так

text
round(

( так как точность входа, единица)
с числами от 1к, пфп справляется

text
round(str_replace(" ", "", 

( но в базу все равно упорно не хочет лезть, влезает только 4-ый знак)



P.S.

пробую самым простым скриптом вывод сделать через нумерик:

text
setlocale(LC_NUMERIC, 'ru'); 
$locale_info = localeconv(); 
$ThisStr = '7 638,78';
$CleatStr = str_replace($locale_info["decimal_point"], "", $ThisStr);
echo "$CleatStr";

как вошло так и вышло. 7 638,78

#353850

Попробуйте форматирование чисел

В одиночном

text

$ThisStr = '7 638,78';
$clear = number_format($ThisStr, 0, '', '');

В общем случае инструмент


$array = localeconv();
$array['thousands_sep'] = '';
setlocale(LC_NUMERIC, $array);

P.S проверить не было возможности

#353855

number_format вообще не хочет обрабатывать такие числа, с любой подменой.

text
A non well formed numeric value encountered in

ко всему массиву не смогу применить, только в частном случае, на входе запроса mysql.

#353860

Попробуйте пробел забить через str_replace, иначе понимает как строку.

#353870
marikk написал:
Попробуйте пробел забить через str_replace, иначе понимает как строку.

да, да понимаю.
вываливает такой же ошибкой (нотисом), вывод = "7" (от 7 638,78).

#353871
text

<?php
$ThisStr = '7 638,78';

echo number_format(str_replace(" ", "", $ThisStr), 0, '', '/'); ?>

Вывод


7/638

Какая версия php ?

#353884

выводит как у вас, только с нотисом предыдущим.

ЗЫ. в том то и прикол, что

можно обработать как ваш вариант number_format(str_replace(" ", "", $ThisStr), 0, '', ''); , так и мой через round.

фишка в том, что в базу криво влазит.

$data->sheets[0]['cells'][$i][10] = 7 638,78;
могу привести пример как

php echo number_format(str_replace(" ", "", $data->sheets[0]['cells'][$i][10]), 0, '', '') дает 7638

text
UPDATE table SET cost = '".number_format(str_replace(" ", "", $data->sheets[0]['cells'][$i][10]), 0, '', '')."';

а в ячейку входит только "7".

text
# php -v
PHP 5.4.4-14+deb7u5 (cli) (built: Oct  3 2013 09:24:58)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
text
# mysql -v
Server version: 5.5.31-0+wheezy1-log (Debian)

первоначальный данные поступают в массив уже в нужной кодировке.

text
$data->setOutputEncoding('UTF-8');

может еще какие условия мускулю задать для входа данных?

Войдите или зарегистрируйтесь, чтобы ответить.