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

@deceze : 당신 말이 맞아요. "localization CSS"를 가질 수 있어야합니다
Don

1
Intl.NumberFormat mdn-ref를
Joshua Baboo

답변:



26

CSS 작업 그룹은 2008 년 에 콘텐츠 형식 에 대한 초안을 발표 했습니다.하지만 지금은 새로운 것이 없습니다.


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 솔루션은 아니지만 작업을 수행합니다!
Don

나는 그것을 좋아한다. 하지만 교체하기 전에 숫자를 문자열로 변환해야했습니다. 번호를 바꿀 수 없습니다.
Mardok

호출하기 전에 _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에 있으면 자바 스크립트 를 사용 하거나 언어 서버 측 (PHP / ruby ​​/ python 등)을 통해 형식을 지정해야합니다.


5
숫자 형식은 내용의 텍스트 또는 기타 표기법 문제 (예 : 언어에 따라 달라지는 날짜 표기법)와 같은 내용 문제입니다. 따라서 숫자 서식은 현지화이며 콘텐츠가 생성 될 때 처리되어야합니다. JavaScript에서 생성하는 것은 JavaScript에서 생성 된 콘텐츠 부분에 적합합니다.
Jukka K. Korpela 2011

나는 그것에 전적으로 동의합니다. 그래서 내 대답에 썼습니다. 아마 더 많은 스트레스를 받았어야 했어요.
mreq 2011

콘텐츠 또는 프레젠테이션 일 수 있습니다. rtl동일한 콘텐츠를 다른 방식으로 보여주는 CSS 를 사용합니다. 서버 측에서도 처리해야합니까?
Don

6

대답은 아니지만 관심있는 perhpas. 몇 년 전에 CSS WG에 제안서를 보냈 습니다 . 그러나 아무 일도 일어나지 않았습니다. 실제로 그들 (및 브라우저 공급 업체)이 이것이 진정한 개발자 문제라고 생각한다면 공이 굴러 갈 수 있을까요?


2
기여해 주셔서 감사합니다. 언젠가는 잡히기를 바랍니다.
ADJenks

4

도움이된다면 ...

PHP 함수 number_format()Narrow No-break Space (  )를 사용합니다. 종종 명확한 천 단위 구분 기호로 사용됩니다.

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

IE8에는 Narrow No-break Space를 렌더링하는 데 몇 가지 문제가 있기 때문에 SPAN으로 변경했습니다.

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

불행히도 이것은 서버 측이며 약간의 CPU 히트가 있습니다. html / css 편집 마스크 기능이 필요합니다. pdf를 제공하지 않는 한 드레싱과 렌더링은 클라이언트 측이어야합니다.
mckenzm

2

이 목적으로 CSS를 사용할 수 없습니다. 가능한 경우 JavaScript를 사용하는 것이 좋습니다. 자세한 내용은 다음을 참조하십시오. printf / string.format에 해당하는 JavaScript

또한 Petr이 언급했듯이 서버 측에서 처리 할 수 ​​있지만 전적으로 시나리오에 따라 다릅니다.


2

나는 당신이 할 수 있다고 생각하지 않습니다. PHP로 코딩하는 경우 number_format ()을 사용할 수 있습니다 . 그리고 다른 프로그래밍 언어에는 숫자 서식 지정 기능도 있습니다.


"백엔드"에서 표시 목적으로 데이터를 변경하는 나쁜 방법.
Buffalo

1

JSP 페이지의 형식화에 Jstl 태그 라이브러리를 사용할 수 있습니다.

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.