PHP fr-FR ve biçimlendirme sayısına setlocale

3 Cevap php

Benim sitelerinden biri Fransız sürümünü oluşturmak için çalışıyorum. Ben sayfanın üstündeki setlocale(LC_ALL, 'fr_FR'); set, ve strftime Ben Fransız tarzı doğru tarihleri ​​görüntülemek duyuyorum kullanarak var.

Ancak ben bir numara ile bazı sorunlar yaşıyorum. Sayfanın Bölüm I Web Service alıyorum verileri kullanır. Böyle bir var bir döndürülen değeri atama ediyorum:

$overallRating = $returnArray['Overall'];

Daha sonra 1 ondalık yere biçimlendirmek için daha sonra aşağıdaki kodu kullanıyorum

number_format($overallRating,1)

İngilizce sürümünde overallRating değeri olabilir 7.5 ve number_format aracılığıyla çalışan için nedeni döndürür olduğunu 7 I (örneğin 7.5 gibi bir değer verir o göstermek istiyorum 7.0)

Ben çiğ $ overallRating değerini yazdırmak Ancak Fransızca versiyonunda I 7,5 ki bu fransız içine tercüme etti gibi görünüyor olsun. Bu iyi olurdu ama ben üzerinden çalıştırırsanız number_format Ben hata alıyorum:

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

Hattı 250 number_format hattı

I 7,5 o kadar karışıklık, ancak bu çözmek için nasıl emin değil için çeviri tahmin ...

PHP 5.3 kullanılması durumunda bana yardımcı olur yeni bir şey var mı

3 Cevap

Yani sonunda araştırma çok sonra cevap buldu.

PHP sadece gerçekten standart ABD ondalık ayraç ile çalışır ve Fransız, seperatör ile baş edemez.

Cevap, mükemmel olmamakla birlikte Fransızca biçimlendirilmiş olması için tarihleri ​​vb izin verirken ABD'yi kullanmak sayısal değerleri sıfırlamak için. Bu satırı yerleştirerek:

 setlocale(LC_NUMERIC, 'C');

Altında

 setlocale(LC_ALL, 'fr_FR'); 

trick yaptı

Bu ne soran var?

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

Sonra Edit:

<?php
setlocale(LC_ALL, 'fr_FR');
$number = '7';
echo $overallRating = number_format($number, 1, '.', '');
?>

Ben "54,33" gibi bir Fransız yapımı dize almak ve işaret edildiği gibi, PHP gerçekten sadece tr biçiminde numaraları seviyor, çünkü geri tr numarası olarak db kaydetmek istedim. Ben bu kadar işi yapmak için bu yerleşik herhangi bir yerleşik PHP dönüşüm işlevlerini görmedim. Binlerce ayırıcı kaldırır ve birlikte ondalık ayırıcı yerine "." ve herhangi bir kurulum ile çalışmak üzere tasarlanmıştır.

//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, '.', '');
}

Ben JavaScript için benzer bir şey inşa edeceğiz. Ekran için Bulunan bu kütüphanesi: http://software.dzhuvinov.com/jsworld-currency-formatting.html