Yii2 / PHP / MySQL - десятичные числа усекаются, давая ложные результаты умножением - PullRequest
0 голосов
/ 07 февраля 2019

В MySQL у меня есть атрибут P10, который является десятичным (6,2).Если я повторяю это в Yii2, я получаю 20,45 - почему запятая, почему не точка?Неважно, как я устанавливаю decimalSeparator в конфигурации.Если я умножу 20,45 на 2.1, то получу 42 вместо 42.945 , поэтому кажется, что 20,45 усекается до 20 при использовании в вычислениях, и у меня естьпонятия не имею почему.Я уже потратил много времени на поиск, и он постепенно сводит меня с ума.

Интересно также, что я повторяю два атрибута в gridview Yii2, и оба являются десятичными (6,2) в MySQL, но все жеодин отражается точкой в ​​качестве десятичного разделителя, а другой - запятой ...?

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

Можете ли вы указать мне правильное направление?

код:

public function getMea5() {
    return $this->P10 * 2.1;
}

1 Ответ

0 голосов
/ 08 февраля 2019

20,45 усекается до 20

Да.Когда строка (а именно «20,45») используется в числовом контексте (*), строка анализируется настолько, насколько это кажется числом.В этом случае , останавливает номер, тем самым игнорирует ,45.(Контраст: « усечение », что означает, что 45 будет включено, а затем брошено.)

Чтобы получить 20,45 вместо 20.45, нужно иметь «локаль»установить, например, "de" (немецкий).

Вот пример, взятый из руководства :

SELECT FORMAT(12332.2,2,'de_DE');
         -> '12.332,20'
...