1

MySQL データベースを備えた CakePHP 1.3 Web サイトがあります。問題は、10 進数の区切り記号としてドットを使用して格納されている価格、二重値があることですが、アプリケーションのフロントエンドはコンマを使用してそれらを表示する必要があります。

これをDBに直接設定する方法はありますか、それとも単にstr_replace EVERYWHEREよりもこれを達成するためのより良い方法ですか? それはとても面倒なことであり、私には悪い習慣のように思えます。

前もって感謝します!

4

5 に答える 5

1

データベースの小数は正しいです。小数として使用されている小数です。それを表示するには、プレゼンテーションにnumber_formatを使用する必要があります。

于 2012-05-15T20:29:01.853 に答える
0

データベース内のドットは区切り文字ではなく、小数の格納方法です。

このような選択クエリを実行できます

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;

http://codepad.org/WXjc7d2Dの例

于 2012-05-15T21:58:30.357 に答える
0
$decimalNumberFromDb= 1234.56;
//
// French notation
//
$frenchNotation = number_format($decimalNumberFromDb, 2, ',', ' '); // Output: 1 234,56
//
// English Notation
//
$englishNotation = number_format($decimalNumberFromDb, 2, '.', ''); // Output: 1234.56
于 2012-05-15T20:34:20.987 に答える
0

それを行うビヘイビアーを使用できます: https://github.com/dereuromark/tools/blob/2.0/Model/Behavior/DecimalInputBehavior.php

于 2012-05-16T13:14:40.323 に答える
0

技術的には、モデルの afterFind ハンドラーで n str_replace を実行するだけで、それを忘れることができます。

于 2012-05-15T20:30:23.770 に答える