본문 바로가기

카테고리 없음

FreeMarker Number 이용하기


string과 같이 이용하기

number을 string으로 변경한다. 이것은 프로그래머가 지정한 형태의 포맷으로 변환해줄때 이용한다.

숫자 포맷에는 computer, currency, number, percent등 이미 지정된 포맷타입이 있다. 이것은 특정 로케일에 맞춰서 변경이 된다. 그리고 프리마커 보다는 Java 플랫폼에 의해 좌우된다. computer은 예외적이다. 이것은 the c built-in 내장 객체를 참조해서 수행된다.

<#assign x=42>
${x}
${x?string}  <#-- the same as ${x} -->
${x?string.number}
${x?string.currency}
${x?string.percent}
${x?string.computer}  

US English 로케일인 경우 다음과 같은 결과를 확인할 수 있다.

42
42
42
$42.00
4,200%
42  

첫번째 3개 표현식은 동일한 결과를 나타낸다. 그리고 처음 2개의 옵션은 기본 형식이라 할수 있다.

<#setting number_format="currency">
<#assign x=42>
${x}
${x?string}  <#-- the same as ${x} -->
${x?string.number}
${x?string.currency}
${x?string.percent}  

출력값은 다음과 같다.

$42.00
$42.00
42
$42.00
4,200%  

상단에 number_format를 currency라고 지정했기 때문에 기본 변환 형식을 통화로 바꿨기 때문에 나타나는 모습니다.

다음은 자바의 number 포맷 형식으로 처리되는 모습을 보여준다.

<#assign x = 1.234>
${x?string("0")}
${x?string("0.#")}
${x?string("0.##")}
${x?string("0.###")}
${x?string("0.####")}

${1?string("000.00")}
${12.1?string("000.00")}
${123.456?string("000.00")}

${1.2?string("0")}
${1.8?string("0")}
${1.5?string("0")} <-- 1.5, rounded towards even neighbor
${2.5?string("0")} <-- 2.5, rounded towards even neighbor

${12345?string("0.##E0")}  

outputs this:

1
1.2
1.23
1.234
1.234

001.00
012.10
123.46

1
2
2 <-- 1.5, rounded towards even neighbor
2 <-- 2.5, rounded towards even neighbor

1.23E4  

금융이나 통계에서 라운드 처리되는 방식은 half-even이라 불리는 방식으로 처리되며, 소숫점에처 처리되어야 할 가장 가까운 값을 선택하게 되어 있다. 만약 1.5와 2.5가 있다면 even방식으로는 2가 되고, 1과 3은 odd 방식으로 처리된 것을 의미한다.

자바 숫자형 문법 패턴은  ${aNumber?string("currency")} 이나  ${aNumber?string.currency} 은 동일하게 처리된다.

사전에 미리 포맷 형식을 지정해두면, 그것을 따라가는 예제이다.

<#setting number_format="0.##">
${1.234}  

outputs this:

1.23  

숫자 포맷 방식은 로케일에 따라간다는것을 보여준다.

<#setting locale="en_US">
US people write:        ${12345678?string(",##0.00")}
<#setting locale="hu">
Hungarian people write: ${12345678?string(",##0.00")}  

outputs this:

US people write:        12,345,678.00
Hungarian people write: 12 345 678,00  

더 많은 정볼르 보고자 한다면 여기 클릭 --> here.

round, floor, ceiling

#노트#

FreeMarker 2.3.13. 이후 버젼부터 지원

숫자를 특정 라운딩 룰에 의해서 변형한다.

  • round: 전체 숫자에 대해서 라운드(올림) 한다.

  • floor: 숫자를 아래숫자로 자른다.

  • ceiling: 숫자를 올림한다.

Example:

<#assign testlist=[
  0, 1, -1, 0.5, 1.5, -0.5,
  -1.5, 0.25, -0.25, 1.75, -1.75]>
<#list testlist as result>
    ${result} ?floor=${result?floor} ?ceiling=${result?ceiling} ?round=${result?round}
</#list>  

Prints:

    0 ?floor=0 ?ceiling=0 ?round=0            
    1 ?floor=1 ?ceiling=1 ?round=1        
    -1 ?floor=-1 ?ceiling=-1 ?round=-1      
    0.5 ?floor=0 ?ceiling=1 ?round=1      
    1.5 ?floor=1 ?ceiling=2 ?round=2      
    -0.5 ?floor=-1 ?ceiling=0 ?round=0     
    -1.5 ?floor=-2 ?ceiling=-1 ?round=-1    
    0.25 ?floor=0 ?ceiling=1 ?round=0     
    -0.25 ?floor=-1 ?ceiling=0 ?round=0    
    1.75 ?floor=1 ?ceiling=2 ?round=2     
    -1.75 ?floor=-2 ?ceiling=-1 ?round=-2  

이 빌트인 메소드는 페이징과 같은 처리를 할때 매우 유용하다.

출처 : http://freemarker.sourceforge.net/docs/ref_builtins_number.html