CSSによる数値(小数点以下の桁数、桁区切り記号など)のフォーマット


121

CSSで数値をフォーマットすることは可能ですか?つまり、小数点以下の桁数、小数点記号、桁区切り記号などです。


61
できませんが、本当にできるはずです。結局のところ、50,000または50000または50,000.00はすべて同じ「データ」であり、CSSの目的である、異なって表示されるだけです。
punkrockbuddyholly

4
@MrMisterMan:ここで投げ捨てられるいくつかのアイデアがあります:wiki.csswg.org/ideas/content-formatting#numbers私は嫌がらせを受け、「仕様」を引用し、みんなの期待を引き上げていると非難されるでしょう。そして私にとって、ここでは非数値テキストがどのように処理されるのか知りたいです。
BoltClock

3
これは良いことだと私は同意しますが、番号はローカライズされたページ内に埋め込まれます。つまり、ページの残りの部分は英語、中国語などの言語であり、IMOがそのローカリゼーションに準拠している必要があります。ページの他の部分とは別にローカライズする必要があるのはなぜですか?
だます

@deceze:あなたは正しいです。「ローカリゼーションCSS」を使用できるようにする必要があります
Don

1
Intl.NumberFormat mdn -ref
Joshua Baboo

回答:


12

使用できますNumber.prototype.toLocaleString()。また、ラテン語、アラビア語など、他の数値形式用にフォーマットすることもできます。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString


2
最もモダンでエレガントなアプローチであり、現在のところCSSで実現することはまだ不可能であるため、1番の答えにする必要があります。
FMA


23

さて、JavaScriptの数値については、次の数値を使用します。

var a = "1222333444555666777888999";
a = a.replace(new RegExp("^(\\d{" + (a.length%3?a.length%3:0) + "})(\\d{3})", "g"), "$1 $2").replace(/(\d{3})+?/gi, "$1 ").trim();

たとえば、他の区切り文字をカンマとして使用する必要がある場合:

var sep = ",";
a = a.replace(/\s/g, sep);

または関数として:

function numberFormat(_number, _sep) {
    _number = typeof _number != "undefined" && _number > 0 ? _number : "";
    _number = _number.replace(new RegExp("^(\\d{" + (_number.length%3? _number.length%3:0) + "})(\\d{3})", "g"), "$1 $2").replace(/(\d{3})+?/gi, "$1 ").trim();
    if(typeof _sep != "undefined" && _sep != " ") {
        _number = _number.replace(/\s/g, _sep);
    }
    return _number;
}

1
ありがとう。純粋なCSSソリューションではありませんが、タスクを実行します!
ドン

私はそれが好きです。ただし、置換する前に数値を文字列に変換する必要もありました。番号の置き換えはできません。
Mardok、2016年

呼び出す前に_number.replace、これがこのような文字列であることを確認する必要があります。_number = typeof _number != "undefined" && _number > 0 ? String(_number) : "";そうしないと、エラー_number.replaceが定義されていないか、関数ではないことになります
Shalkam

3
(123456789).toLocaleString( 'en-GB')などを単に使用しないのはなぜですか?
Joehannes、

16

おそらく、これを行うための最良の方法は、書式設定を示すクラスでスパンを設定し、次にJquery .eachを使用して、DOMが読み込まれたときにスパンで書式設定を行うことです...


9

いいえ、DOMに入ったらJavaScriptを使用するか、言語サーバー側(PHP / ruby​​ / pythonなど)でフォーマットする必要があります。


5
数値の形式は、コンテンツのテキストやその他の表記上の問題(言語に依存する日付表記など)のようなコンテンツの問題です。したがって、数値のフォーマットはローカリゼーションであり、コンテンツが生成されるときに処理する必要があります。JavaScriptでそれを行うことは、JavaScriptで生成されたコンテンツの一部にとって意味があります。
Jukka K.Korpela

私はそれに完全に同意します。それが私が私の答えにそれを書いた理由です。おそらくもっとストレスがかかるはずです。
mreq 2011

コンテンツまたはプレゼンテーションのいずれかです。rtl同じコンテンツを別の方法で表示するCSSを取り上げます。サーバー側でも扱う必要がありますか?
Don

6

答えではなく、興味のあるパーパス。私は数年前にCSS WGに提案を送りまし。しかし、何も起こりませんでした。確かに彼ら(そしてブラウザベンダー)がこれを本物の開発者の懸念であると考えるなら、おそらくボールは転がり始めるかもしれませんか?


2
貢献してくれてありがとう。いつかそれが定着することを願っています。
ADJenks 2017

4

それが役立つ場合...

私はPHP関数number_format()狭いノーブレークスペース )を使用しています。多くの場合、明確な3桁区切り記号として使用されます。

echo number_format(200000, 0, "", " ");

IE8は狭いノーブレークスペースをレンダリングするためにいくつかの問題があるため、SPANに変更しました

echo "<span class='number'>".number_format(200000, 0, "", "<span></span>")."</span>";
.number SPAN{
    padding: 0 1px; 
}

残念ながら、これはサーバー側であり、わずかなCPUヒットがあります。html/ css編集マスク機能が必要です。PDFを提供しない限り、ドレッシングとレンダリングはクライアント側で行う必要がありますか?
mckenzm 2016

2

この目的でCSSを使用することはできません。該当する場合は、JavaScriptの使用をお勧めします。詳細については、こちらをご覧ください。。printf/ string.formatと同等のJavaScript

また、Petrが言及したように、サーバー側でそれを処理できますが、それは完全にシナリオに依存します。



1

Jstlタグライブラリを使用して、JSPページのフォーマットを設定できます。

JSP Page
//import the jstl lib
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>

<c:set var="balance" value="120000.2309" />
<p>Formatted Number (1): <fmt:formatNumber value="${balance}" 
        type="currency"/></p>
<p>Formatted Number (2): <fmt:formatNumber type="number" 
        maxIntegerDigits="3" value="${balance}" /></p>
<p>Formatted Number (3): <fmt:formatNumber type="number" 
        maxFractionDigits="3" value="${balance}" /></p>
<p>Formatted Number (4): <fmt:formatNumber type="number" 
        groupingUsed="false" value="${balance}" /></p>
<p>Formatted Number (5): <fmt:formatNumber type="percent" 
        maxIntegerDigits="3" value="${balance}" /></p>
<p>Formatted Number (6): <fmt:formatNumber type="percent" 
        minFractionDigits="10" value="${balance}" /></p>
<p>Formatted Number (7): <fmt:formatNumber type="percent" 
        maxIntegerDigits="3" value="${balance}" /></p>
<p>Formatted Number (8): <fmt:formatNumber type="number" 
        pattern="###.###E0" value="${balance}" /></p>

結果

書式設定された番号(1):£120,000.23

書式設定された数値(2):000.231

書式設定された番号(3):120,000.231

書式設定された番号(4):120000.231

書式設定された数値(5):023%

書式設定された数値(6):12,000,023.0900000000%

書式設定された数値(7):023%

書式設定された番号(8):120E3

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.