MySQL データベースを備えた CakePHP 1.3 Web サイトがあります。問題は、10 進数の区切り記号としてドットを使用して格納されている価格、二重値があることですが、アプリケーションのフロントエンドはコンマを使用してそれらを表示する必要があります。
これをDBに直接設定する方法はありますか、それとも単にstr_replace EVERYWHEREよりもこれを達成するためのより良い方法ですか? それはとても面倒なことであり、私には悪い習慣のように思えます。
前もって感謝します!
データベースの小数は正しいです。小数として使用されている小数です。それを表示するには、プレゼンテーションにnumber_formatを使用する必要があります。
データベース内のドットは区切り文字ではなく、小数の格納方法です。
このような選択クエリを実行できます
select *, REPLACE(CAST(price AS CHAR), '.', ',') as price_formatted from products;
または、PHPでnumber_formatを使用して他の形式で表示します
$price = 1300222.99;
echo "Original: ".$price.PHP_EOL;
echo "english/us: ".number_format($price,2).PHP_EOL;
echo "Dutch/german: ".number_format($price, 2, ',', '.').PHP_EOL;
echo "French: ".number_format($price, 2, ',', ' ').PHP_EOL;
echo "Swiss: ".number_format($price, 2, ',', '\'').PHP_EOL;
$decimalNumberFromDb= 1234.56;
//
// French notation
//
$frenchNotation = number_format($decimalNumberFromDb, 2, ',', ' '); // Output: 1 234,56
//
// English Notation
//
$englishNotation = number_format($decimalNumberFromDb, 2, '.', ''); // Output: 1234.56
それを行うビヘイビアーを使用できます: https://github.com/dereuromark/tools/blob/2.0/Model/Behavior/DecimalInputBehavior.php
技術的には、モデルの afterFind ハンドラーで n str_replace を実行するだけで、それを忘れることができます。