2013-12-11 31 views
12

Bir sayı biçimlendirmek ve açısal ile çoğaltmak istiyorum. Ben denedim neAngularjs içinde bir sayı çoğaltmak ve biçimlendirmek

  0 => "John has no bitcoins" 
     1 => "John has 1 bitcoin" 
     2 => "John has 2 bitcoins" 
12345.6789 => "John has 12,345.67 bitcoins" 

:

(Bitcoins bir dizi verilmiş) Örneğin

John has 
<ng-pluralize count="bitcoin_amount | round:2" 
       when="{'0': 'no bitcoins', 
        '1': '1 bitcoin', 
        'other': '{} bitcoins'}"> 
</ng-pluralize> 

Ama bu, çünkü sayıları eşit veya 1000 daha büyük için, sefil başarısız olurlarsa count özniteliğinde 1,000 olarak geçti, böylece yalnızca binlerce gösterilir. Örneğin: bir örnek için this demo kutu number of people yılında 1,000 yapıştırarak

1001 => 1 
1000 => 1 
2000 => 2 
etc... 

deneyin.


Numarayı nasıl biçimlendirebilir ve açısal olarak çoğaltabilirim?

cevap

23

Burada düzenli bir ifade kullanmanıza gerek yoktur.

Öyle gibi ng-pluralize direktifin when özelliğinde doğrudan mantığı geçirebilirsiniz:

<ng-pluralize count="amount" when="{'0': 'no bitcoins', 
        '1': '1 bitcoin', 
        'other': '{{amount | number:2}} bitcoins'}"> 
</ng-pluralize> 

Working plunker.

5

Yalnızca virgülleri kaldırabilir ve kaldırabilir miyim?

John has 
<ng-pluralize count="bitcoin_amount.replace(',','') | round:2" 
       when="{'0': 'no bitcoins', 
        '1': '1 bitcoin', 
        'other': '{} bitcoins'}"> 
</ng-pluralize> 

jsfiddlehttp://jsfiddle.net/9zmVW/

1

İsterseniz 's' ekleyerek varsayılan bir genel yöntem,

ve dize ile belirli çoğul formları pass:

function plural(s, pl){ 
    var n= parseFloat(s); 
    if(isNaN(n) || Math.abs(n)=== 1) return s; 
    if(!pl) return s+'s'; 
    return s.replace(/\S+(\s*)$/, pl+'$1'); 
} 

// test: 
[0, .5, 1, 1.5, 2].map(function(itm){ 
    return [plural(itm+' bitcoin'), 
    plural(itm+' box', 'boxes'), 
    plural(itm+' foot', 'feet')]; 
}).join('\n'); 


// returned values: 
0 bitcoins, 0 boxes, 0 feet 
0.5 bitcoins, 0.5 boxes, 0.5 feet 
1 bitcoin, 1 box, 1 foot 
1.5 bitcoins, 1.5 boxes, 1.5 feet 
2 bitcoins, 2 boxes, 2 feet 
1

l10ns kullanabilirsiniz ngPluralize kullanmak istemiyorsanız ve ayrıca mantığınızı bir yerelleştirme deposunda saklamak istiyorsanız. L10ns, çoğulculuğun ele alınması için fiili standart olan ICU'nun Messageformat'ı kullanmaktadır. ICU'nun Messageformat'ı, veri havuzu olan CLDR'yi kullanıyor ve Apple ve Google gibi birçok büyük şirketin katkıda bulunuyor.

Normal konuşulan İngilizce'de, iki çoğul form singular ve plural var. CLDR, 6 farklı çeşit çoğul hal tanımlar. Ve bunlar zero, one, two, few, many ve other'dur. One ve two, zorunlu olarak 1 ve 2 rakamları anlamına gelmez.

Örneğin, CLDR'de English için iki çoğul form tanımlanır. One ve other. Eğer çeviri arayüzünü l10ns'da kullanırsanız, o zaman her çoğul formdan bir örnek alırsınız.Eğer L10ns kullanıyorsanız

Yani örnek olacaktır: Yukarıdaki olarak

{bitcoins, plural, =0{no bitcoins} one{1 bitcoin} other{# bitcoins}}. 

, =0 kesin vaka hedefliyor.

Daha fazla bilgi için lütfen documentation numaralarına bakın.