4

私のサイトの 1 つのフランス語版を作成しようとしています。setlocale(LC_ALL, 'fr_FR');ページの上部に設定しstrftime、フランス語のスタイルで日付を正しく表示しています。

ただし、数に問題があります。ページの一部で、Web サービスから取得したデータを使用しています。次のように、戻り値を var に割り当てています。

$overallRating = $returnArray['Overall'];

次に、後で次のコードを使用して、小数点以下1桁にフォーマットします

number_format($overallRating,1)

英語版では、overallRating の値は である可能性があり、次7.5のような値を返します7.5(number_format を実行する理由は、7I want it to displayが返される場合です7.0)

ただし、フランス語版では、生の $overallRating 値を出力する7,5と、フランス語に翻訳されたように見えます。これは問題ありませんが、実行するとnumber_formatエラーが発生します。

Notice: A non well formed numeric value encountered in /sites/index.php  on line 250

ライン 250 はnumber_formatラインです

への翻訳7,5が台無しになっていると思いますが、これを解決する方法がわかりません...

私に役立つ新しい何かがある場合に備えてPHP 5.3を使用する

4

3 に答える 3

8

そのため、多くの調査の結果、最終的に答えが見つかりました。

PHP は、標準の米国の小数点区切り記号でしか機能せず、フランス語の , 区切り記号には対応できません。

答えは、完全ではありませんが、日付などをフランス語でフォーマットできるようにしながら、US を使用するように数値をリセットすることです。次の行を配置します。

 setlocale(LC_NUMERIC, 'C');

 setlocale(LC_ALL, 'fr_FR'); 

トリックをやった

于 2010-05-26T10:39:15.043 に答える
1

「54,33」のようなフランス語で編集された文字列を取得し、それを en_US 番号としてデータベースに保存したかったのは、指摘されているように、PHP は実際には en_US 形式の数字のみを好むためです。組み込みの PHP 変換関数が表示されなかったので、これを構築して仕事をしました。桁区切り記号を削除し、小数点記号を "." に置き換えます。どんなセットアップにも対応するように設計されています。

//Currency Conversion Back to US for DB Storage or PHP number formatting
function number_convert_us($num) {
    $locale_settings = localeconv();
    $num = str_replace($locale_settings['mon_thousands_sep'], "", trim($num));
    $num = str_replace($locale_settings['mon_decimal_point'], ".", $num);
    return number_format((double)$num, 2, '.', '');
}

JavaScript 用に同様のものを作成します。表示用にこのライブラリを見つけました: http://software.dzhuvinov.com/jsworld-currency-formatting.html

于 2012-06-21T13:50:52.657 に答える
1

これはあなたが求めているものですか?

<?php
    $overallRating = number_format($number, 1, '.', '');
?>

後で編集:

<?php
setlocale(LC_ALL, 'fr_FR');
$number = '7';
echo $overallRating = number_format($number, 1, '.', '');
?>
于 2010-05-25T16:19:12.980 に答える