this class seems to be painful: it is not, formatting and parsing are highly customizable, but what you probably need is really simple:
if you want to localize a number use:
<?php
$a = new \NumberFormatter("it-IT", \NumberFormatter::DECIMAL);
echo $a->format(12345.12345) . "<br>"; // outputs 12.345,12
$a->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0);
$a->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 100); // by default some locales got max 2 fraction digits, that is probably not what you want
echo $a->format(12345.12345) . "<br>"; // outputs 12.345,12345
?>
if you want to print money use:
<?php
$a = new \NumberFormatter("it-IT", \NumberFormatter::CURRENCY);
echo $a->format(12345.12345) . "<br>"; // outputs €12.345,12
?>
if you have money data stored as (for example) US dollars and you want to print them using the it-IT notation, you need to use
<?php
$a = new \NumberFormatter("it-IT", \NumberFormatter::CURRENCY);
echo $a->formatCurrency(12345, "USD") . "<br>"; // outputs $ 12.345,00 and it is formatted using the italian notation (comma as decimal separator)
?>
another useful example about currency (how to obtain the currency name by a locale string):
<?php
$frontEndFormatter = new \NumberFormatter("it-IT", \NumberFormatter::CURRENCY);
$adminFormatter = new \NumberFormatter("en-US", \NumberFormatter::CURRENCY);
$symbol = $adminFormatter->getSymbol(\NumberFormatter::INTL_CURRENCY_SYMBOL); // got USD
echo $frontEndFormatter->formatCurrency(12345.12345, $symbol) . "<br>";
?>
NumberFormatter sınıfı
(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
Giriş
Programlar sayılar üzerinde işlem yapmak ve bunları saklamak için yerelden bağımsız bir ikil gösterim kullanırlar. Sayılar gösterilirken veya basılırken bunlar yerele özgü dizgelere dönüştürülür. Örneğin, 12345.67 sayısı ABD için "12,345.67", Fransa için "12 345,67" ve Almanya ve Türkiye için "12.345,67" biçimindedir.
NumberFormatter (SayıBiçemleyici) sınıfınca sağlanmış yöntemleri çağırmak suretiyle sayıları, paraları ve yüzdeleri öntanımlı yerele veya belirtilen yerele uygun olarak biçemleyebilirsiniz. NumberFormatter sınıfı yerele duyarlı olduğundan her yerel için yeni bir sayı biçemleyici oluşturmanız gerekir. NumberFormatter sınıfının yöntemleri kayan noktalı sayılar gibi ilkel sayı türlerini biçemler ve bunları yerele özgü dizgeler olarak çıktılar.
Paraları, uygun bir sayı ve para birimi simgesiyle biçemleyip bir dizge olarak döndürmek için bir biçemleyici oluşturmak amacıyla para biçemleme türünü kullanabilirsiniz. Şüphesiz, NumberFormatter sınıfı paralar arasındaki kıymet oranlarını bilmez ve belirtilen paranın değerini belirtilen yerele göre dönüştürmez. Yani para birimi ne olursa olsun para biriminin yanında hep belirttiğiniz miktarı görürsünüz. 9988776.65 değeri için sonuçlar şöyle olabilir:
- Fransa'da 9 988 776,65 €
- Türkiye'de 9.988.776,65 YTL veya 9.988.776 TL
- ABD'de $9,988,776.65
Yüzdeleri biçemlemek için, yüzde biçemleme türü kullanılarak yerele özgü bir biçemleyici oluşturulur. Bu biçemleyici ile örneğin, 0.75 gibi bir ondalık sayı %75 olarak gösterilir.
Sayıların hecelenmesi gibi daha karmaşık biçemlemeler için kurala dayalı sayı biçemleyici kullanılır.
Sınıf Sözdizimi
Öntanımlı Sabitler
Bu biçemler numfmt_create() işlevi tarafından biçemleyici türünü tanımlamak için kullanılırlar.
-
NumberFormatter::PATTERN_DECIMAL(integer) - Şablona göre tanımlı ondalık biçem
-
NumberFormatter::DECIMAL(integer) - Ondalık biçem
-
NumberFormatter::CURRENCY(integer) - Para birimi biçemi
-
NumberFormatter::PERCENT(integer) - Yüzde biçemi
-
NumberFormatter::SCIENTIFIC(integer) - Bilimsel sayı gösterim biçemi
-
NumberFormatter::SPELLOUT(integer) - Kurala dayalı heceleme biçemi
-
NumberFormatter::ORDINAL(integer) - Kurala dayalı sıra gösterim biçemi
-
NumberFormatter::DURATION(integer) - Kurala dayalı süre gösterim biçemi
-
NumberFormatter::PATTERN_RULEBASED(integer) - Şablona göre tanımlı kurala dayalı biçem
-
NumberFormatter::DEFAULT_STYLE(integer) - Yerele özgü öntanımlı biçem
-
NumberFormatter::IGNORE(integer) - PATTERN_DECIMAL için takma ad
Bu sabitler sayıların nasıl çözümlenip biçemleneceğini tanımlar. numfmt_format() ve numfmt_parse() işlevlerinin değiştirgeleri olarak kullanılırlar.
-
NumberFormatter::TYPE_DEFAULT(integer) - Türü değişken türünden türet
-
NumberFormatter::TYPE_INT32(integer) - 32 bitlik tamsayı olarak çözümle/biçemle
-
NumberFormatter::TYPE_INT64(integer) - 64 bitlik tamsayı olarak çözümle/biçemle
-
NumberFormatter::TYPE_DOUBLE(integer) - Bir kayan noktalı sayı olarak çözümle/biçemle
-
NumberFormatter::TYPE_CURRENCY(integer) - Para birimi olarak çözümle/biçemle
numfmt_get_attribute() ve numfmt_set_attribute() işlevi tarafından kullanılan sayı biçemleme öznitelikleri:
-
NumberFormatter::PARSE_INT_ONLY(integer) - Sadece tamsayıları çözümle.
-
NumberFormatter::GROUPING_USED(integer) - Gruplama ayracı kullan.
-
NumberFormatter::DECIMAL_ALWAYS_SHOWN(integer) - Ondalık noktayı daima göster.
-
NumberFormatter::MAX_INTEGER_DIGITS(integer) - Azami tamsayı hane sayısı.
-
NumberFormatter::MIN_INTEGER_DIGITS(integer) - Asgari tamsayı hane sayısı.
-
NumberFormatter::INTEGER_DIGITS(integer) - Tamsayı hane sayısı.
-
NumberFormatter::MAX_FRACTION_DIGITS(integer) - Ondalık kısım azami hane sayısı
-
NumberFormatter::MIN_FRACTION_DIGITS(integer) - Ondalık kısım asgari hane sayısı.
-
NumberFormatter::FRACTION_DIGITS(integer) - Ondalık kısım hane sayısı
-
NumberFormatter::MULTIPLIER(integer) - Çarpan.
-
NumberFormatter::GROUPING_SIZE(integer) - Grup genişliği.
-
NumberFormatter::ROUNDING_MODE(integer) - Yuvarlama kipi.
-
NumberFormatter::ROUNDING_INCREMENT(integer) - Yuvarlama artışı.
-
NumberFormatter::FORMAT_WIDTH(integer) - Çıktı biçeminde dolgu genişliği.
-
NumberFormatter::PADDING_POSITION(integer) - Dolgunun konumu. Olası değerler için dolgu konumlama sabitlerine bakınız.
-
NumberFormatter::SECONDARY_GROUPING_SIZE(integer) - İkincil gruplama genişliği.
-
NumberFormatter::SIGNIFICANT_DIGITS_USED(integer) - Kıymetli haneleri kullan.
-
NumberFormatter::MIN_SIGNIFICANT_DIGITS(integer) - Asgari kıymetli hane sayısı.
-
NumberFormatter::MAX_SIGNIFICANT_DIGITS(integer) - Azami kıymetli hane sayısı.
-
NumberFormatter::LENIENT_PARSE(integer) - Kurala dayalı biçemlerde kullanılan esnek çözümleme kipi.
numfmt_get_text_attribute() ve numfmt_set_text_attribute() işlevlerinde kullanılan sayı biçemi metin öznitelikleri:
-
NumberFormatter::POSITIVE_PREFIX(integer) - Pozitif öneki.
-
NumberFormatter::POSITIVE_SUFFIX(integer) - Pozitif soneki.
-
NumberFormatter::NEGATIVE_PREFIX(integer) - Negatif öneki.
-
NumberFormatter::NEGATIVE_SUFFIX(integer) - Negatif soneki.
-
NumberFormatter::PADDING_CHARACTER(integer) - Dolgu karakteri.
-
NumberFormatter::CURRENCY_CODE(integer) - ISO para birimi.
-
NumberFormatter::DEFAULT_RULESET(integer) - Öntanımlı kural kümesi. Sadece kurala dayalı biçemleyicilerle kullanılabilir.
-
NumberFormatter::PUBLIC_RULESETS(integer) - Genel kural kümeleri. Sadece kurala dayalı biçemleyicilerle kullanılabilir. Salt okunur bir özniteliktir. Genel kural kümeleri, kural kümesi isimleri noktalı virgüllerle (;) ayrılarak tek bir dizge halinde gönderilir.
numfmt_get_symbol() ve numfmt_set_symbol() işlevleri tarafından kullanılan sayı biçemleme simgeleri.
-
NumberFormatter::DECIMAL_SEPARATOR_SYMBOL(integer) - Ondalık ayraç.
-
NumberFormatter::GROUPING_SEPARATOR_SYMBOL(integer) - Gruplama ayracı.
-
NumberFormatter::PATTERN_SEPARATOR_SYMBOL(integer) - Şablon ayracı.
-
NumberFormatter::PERCENT_SYMBOL(integer) - Yüzde imi.
-
NumberFormatter::ZERO_DIGIT_SYMBOL(integer) - Sıfır.
-
NumberFormatter::DIGIT_SYMBOL(integer) - Şablonda bir rakamı ifade eden karakter.
-
NumberFormatter::MINUS_SIGN_SYMBOL(integer) - Eksi imi.
-
NumberFormatter::PLUS_SIGN_SYMBOL(integer) - Artı imi.
-
NumberFormatter::CURRENCY_SYMBOL(integer) - Para birimi simgesi.
-
NumberFormatter::INTL_CURRENCY_SYMBOL(integer) - Uluslararası para birimi simgesi.
-
NumberFormatter::MONETARY_SEPARATOR_SYMBOL(integer) - Para ayracı.
-
NumberFormatter::EXPONENTIAL_SYMBOL(integer) - Üstel imi.
-
NumberFormatter::PERMILL_SYMBOL(integer) - Binde imi.
-
NumberFormatter::PAD_ESCAPE_SYMBOL(integer) - Öncelem dolgu karakteri.
-
NumberFormatter::INFINITY_SYMBOL(integer) - Sonsuz imi.
-
NumberFormatter::NAN_SYMBOL(integer) - Bir-sayı-değil imi.
-
NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL(integer) - Kıymetli hane imi.
-
NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL(integer) - Para gruplama imi.
numfmt_get_attribute()
ve numfmt_set_attribute() işlevleri tarafından
NumberFormatter::ROUNDING_MODE özniteliği ile
kullanılan yuvarlama kipi değerleri.
-
NumberFormatter::ROUND_CEILING(integer) - Pozitif sonsuza yuvarlama kipi.
-
NumberFormatter::ROUND_DOWN(integer) - Sıfıra yuvarlama kipi.
-
NumberFormatter::ROUND_FLOOR(integer) - Negatif sonsuza yuvarlama kipi.
-
NumberFormatter::ROUND_HALFDOWN(integer) - İki komşuya da eşit uzaklıkta olmamak koşuluyla aşağı yuvarlama kipi.
-
NumberFormatter::ROUND_HALFEVEN(integer) - İki komşuya da eşit uzaklıkta olmamak koşuluyla çift sayılı komşuya yuvarlama kipi.
-
NumberFormatter::ROUND_HALFUP(integer) - İki komşuya da eşit uzaklıkta olmamak koşuluyla yukarı yuvarlama kipi.
-
NumberFormatter::ROUND_UP(integer) - Sıfırdan öteye yuvarlama kipi.
numfmt_get_attribute()
ve numfmt_set_attribute() işlevleri tarafından
NumberFormatter::PADDING_POSITION özniteliği ile
birlikte kullanılan dolgu konumu değerleri:
-
NumberFormatter::PAD_AFTER_PREFIX(integer) - Dolgu karakterlerini önekten sonra yerleştir.
-
NumberFormatter::PAD_AFTER_SUFFIX(integer) - Dolgu karakterlerini sonekten sonra yerleştir.
-
NumberFormatter::PAD_BEFORE_PREFIX(integer) - Dolgu karakterlerini önekten önce yerleştir.
-
NumberFormatter::PAD_BEFORE_SUFFIX(integer) - Dolgu karakterlerini sonekten önce yerleştir.
İçindekiler
- NumberFormatter::create — Bir sayı biçemleyici oluşturur
- NumberFormatter::formatCurrency — Bir para değerini biçemler
- NumberFormatter::format — Bir sayıyı biçemler
- NumberFormatter::getAttribute — Bir sayısal öznitelikle döner
- NumberFormatter::getErrorCode — Biçemleyicinin son hata numarası ile döner
- NumberFormatter::getErrorMessage — Biçemleyicinin son hata iletisini döndürür
- NumberFormatter::getLocale — Biçemleyici yerelin ismi ile döner
- NumberFormatter::getPattern — biçemleyici tarafından kullanılan kalıp dizgesi ile döner
- NumberFormatter::getSymbol — Simge değeri ile döner
- NumberFormatter::getTextAttribute — Bir metin öznitelik ile döner
- NumberFormatter::parseCurrency — Bir para gösteriminin sayısal değeri ile döner
- NumberFormatter::parse — Bir sayı dizgesini sayıya dönüştürür
- NumberFormatter::setAttribute — Bir öznitelik tanımlar
- NumberFormatter::setPattern — Biçemleyici kalıbı tanımlar
- NumberFormatter::setSymbol — Bir simge değeri tanımlar
- NumberFormatter::setTextAttribute — Bir metin öznitelik tanımlar
Sample script to print number in English.
<?php
$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
echo $f->format(123456);
?>
Produces the result:
one hundred twenty-three thousand four hundred fifty-six
