Проблема с числами с "." при переносе из массива в переменную

12
P
На сайте с 06.01.2009
Offline
601
649

Здравствуйте. Подскажите, пож-та, в чем может быть проблема


$zakzen = $mass_zakup_zen[$x];
$rest = substr($zakzen, 0, 1);
$rest2 = substr($zakzen, 1);
$resultttt = "[$rest/$rest2][$zakzen]";
echo $resultttt;

print_r($mass_zakup_zen[$x]);

print_r дает результат 1.02 (это верно, именно такое значение в массиве).

но echo $resultttt дает результат [1/][1], а мне надо получить [1/.02][1.02]

Вопрос: почему округлилось значение с 1.02 до 1 в $zakzen ?

Подскажите, пож-та.

Спасибо

O3
На сайте с 17.11.2008
Offline
127
#1

код:


<?php

$x = 1;
$mass_zakup_zen = array('1'=>'1.02');
$zakzen = $mass_zakup_zen[$x];

$rest = substr($zakzen, 0, 1);
$rest2 = substr($zakzen, 1);
$zakzen = $mass_zakup_zen[$x];
$resultttt = "[$rest/$rest2][$zakzen]";
echo $resultttt;

?>

Вывод:

[1/.02][1.02]

Сделайте

var_dump($mass_zakup_zen);

?

P
На сайте с 06.01.2009
Offline
601
#2

oleg3d

результат


array(1) { [0]=> string(4) "1.02" }
S
На сайте с 30.09.2016
Offline
469
#3

Не знаю. Только что проверил предмет вопроса - выдаёт

[1/.02][1.02]1.02
Может быть, какие-то настройки системы срабатывают? Даже так сходу и в голову ничего не приходит.
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
O3
На сайте с 17.11.2008
Offline
127
#4

и еще: php5 и php7 разные вещи

там с интами и типами намутили

у меня 5.6.18

P
На сайте с 06.01.2009
Offline
601
#5

Проблема именно в вынимании из массива, в этой строке

$zakzen = $mass_zakup_zen[$x];

если её не использовать, а все делать с $mass_zakup_zen[$x] , то показывает нормально. Но все таки хотелось бы верное значение получить в zakzen

Причем

$dldl = strlen($zakzen);

показывает, что длинна = 4 знака.

S
На сайте с 30.09.2016
Offline
469
#6

Я на всех версиях PHP проверил. Везде нормальный результат получается.

O3
На сайте с 17.11.2008
Offline
127
#7

нагуглил:

"Есть функция gettype(), возвращающая тип, который РНР назначил переменной:"

<?php

$x = 1;
$mass_zakup_zen = array('1'=>'1.02');
$zakzen = $mass_zakup_zen[$x];
print(gettype($zakzen));
print("\n");
print(gettype($mass_zakup_zen[$x]));

?>

string

string

У вас

int

string

?

и если

$zakzen = (float)$mass_zakup_zen[$x];

?

P
На сайте с 06.01.2009
Offline
601
#8
Sitealert:
Я на всех версиях PHP проверил. Везде нормальный результат получается.

Блин, прошу прощения, вот что показывает var_dump

float(1)

это что, надо в базе значение поля менять с числа, на строку? данные в массив берутся из колонки в базе.

oleg3d, а print(gettype() показывает

double

В базе в таблице назначено decimal(8,2)

O3
На сайте с 17.11.2008
Offline
127
#9

кажись блин пора мне на пенсию

P
На сайте с 06.01.2009
Offline
601
#10
oleg3d:
кажись блин пора мне на пенсию

Все, ребята, отлично!

Блин, это мне пора очки одевать.

ну надо строку не заметить с round значения, там код более сложный, чем я показал.

Проблему решил!!!Всем спасибо. Извините, что отвлек.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий