Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

Commit

Permalink
update NumberFormatUtilTest ,fix #165
Browse files Browse the repository at this point in the history
  • Loading branch information
venusdrogon committed Aug 15, 2016
1 parent e9bbb50 commit 4edff59
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 40 deletions.
16 changes: 13 additions & 3 deletions src/main/java/com/feilong/core/lang/NumberUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -343,19 +343,29 @@ public static String toPointFive(Number value){
}

/**
* 数字格式化 .
* 将数字 <code>value</code> 按照指定的格式 <code>numberPattern</code> 格式成字符串 .
*
* <p>
* 调用 {@link NumberFormatUtil#format(Number, String)},当遇到需要舍入的时候,使用常用的 {@link RoundingMode#HALF_UP}
* </p>
*
* <h3>关于参数 <code>value</code>:</h3>
*
* <blockquote>
* <p>
* <b>请尽量传递Integer,Long,BigDecimal,而不要使用 float,double等浮点类型</b>,否则可能结果不准确,特别是jdk8以下的版本,具体参见
* <a href="https://github.com/venusdrogon/feilong-core/issues/165">NumberFormatUtilTest 在 jdk8 下面测试不通过</a>
* </p>
*
* </blockquote>
*
* <h3>示例:</h3>
*
* <pre class="code">
* //将数字转成百分数字符串,不带小数点
* <span style="color:green">//将数字转成百分数字符串,不带小数点</span>
* NumberUtil.toString(0.24f, NumberPattern.PERCENT_WITH_NOPOINT) = 24%
*
* //将数字转成百分数字符串,带两位小数点
* <span style="color:green">//将数字转成百分数字符串,带两位小数点</span>
* NumberUtil.toString(0.24f, NumberPattern.PERCENT_WITH_2POINT) = 24.00%
* </pre>
*
Expand Down
58 changes: 39 additions & 19 deletions src/main/java/com/feilong/core/text/NumberFormatUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,20 +68,30 @@ private NumberFormatUtil(){
* 该方法使用 {@link java.math.RoundingMode#HALF_UP}
* </p>
*
* <h3>关于参数 <code>value</code>:</h3>
*
* <blockquote>
* <p>
* <b>请尽量传递Integer,Long,BigDecimal,而不要使用 float,double等浮点类型</b>,否则可能结果不准确,特别是jdk8以下的版本,具体参见
* <a href="https://github.com/venusdrogon/feilong-core/issues/165">NumberFormatUtilTest 在 jdk8 下面测试不通过</a>
* </p>
*
* </blockquote>
*
* <h3>示例:</h3>
*
* <blockquote>
*
* <pre class="code">
* NumberFormatUtil.format(1.15, "#####.#") = 1.2
* NumberFormatUtil.format(1.25, "#####.#") = 1.3
* NumberFormatUtil.format(1.251, "#####.#") = 1.3
* NumberFormatUtil.format(toBigDecimal(1.15), "#####.#") = 1.2
* NumberFormatUtil.format(toBigDecimal(1.25), "#####.#") = 1.3
* NumberFormatUtil.format(toBigDecimal(1.251), "#####.#") = 1.3
*
* NumberFormatUtil.format(-1.15, "#####.#") = -1.2
* NumberFormatUtil.format(-1.25, "#####.#") = -1.3
* NumberFormatUtil.format(-1.251, "#####.#") = -1.3
* NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#") = -1.2
* NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#") = -1.3
* NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#") = -1.3
*
* NumberFormatUtil.format(25.5, "RP #####") = RP 26
* NumberFormatUtil.format(toBigDecimal(25.5), "RP #####") = RP 26
* </pre>
*
* </blockquote>
Expand All @@ -105,6 +115,16 @@ public static String format(Number value,String numberPattern){
/**
* 将 {@link Number} 使用 {@link RoundingMode} <code>numberPattern</code>格式化.
*
* <h3>关于参数 <code>value</code>:</h3>
*
* <blockquote>
* <p>
* <b>请尽量传递Integer,Long,BigDecimal,而不要使用 float,double等浮点类型</b>,否则可能结果不准确,特别是jdk8以下的版本,具体参见
* <a href="https://github.com/venusdrogon/feilong-core/issues/165">NumberFormatUtilTest 在 jdk8 下面测试不通过</a>
* </p>
*
* </blockquote>
*
* <h3>关于参数 <code>roundingMode</code></h3>
*
* <blockquote>
Expand All @@ -123,22 +143,22 @@ public static String format(Number value,String numberPattern){
* <blockquote>
*
* <pre class="code">
* NumberFormatUtil.format(1.15, "#####.#",null) = 1.2
* NumberFormatUtil.format(1.25, "#####.#",null) = 1.3
* NumberFormatUtil.format(1.251, "#####.#",null) = 1.3
* NumberFormatUtil.format(toBigDecimal(1.15), "#####.#",null) = 1.2
* NumberFormatUtil.format(toBigDecimal(1.25), "#####.#",null) = 1.3
* NumberFormatUtil.format(toBigDecimal(1.251), "#####.#",null) = 1.3
*
* NumberFormatUtil.format(-1.15, "#####.#",null) = -1.2
* NumberFormatUtil.format(-1.25, "#####.#",null) = -1.3
* NumberFormatUtil.format(-1.251, "#####.#",null) = -1.3
* NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#",null) = -1.2
* NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#",null) = -1.3
* NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#",null) = -1.3
*
*
* NumberFormatUtil.format(1.15, "#####.#", RoundingMode.HALF_EVEN) = 1.2
* NumberFormatUtil.format(1.25, "#####.#", RoundingMode.HALF_EVEN) = 1.2
* NumberFormatUtil.format(1.251, "#####.#", RoundingMode.HALF_EVEN) = 1.3
* NumberFormatUtil.format(toBigDecimal(1.15), "#####.#", RoundingMode.HALF_EVEN) = 1.2
* NumberFormatUtil.format(toBigDecimal(1.25), "#####.#", RoundingMode.HALF_EVEN) = 1.2
* NumberFormatUtil.format(toBigDecimal(1.251), "#####.#", RoundingMode.HALF_EVEN) = 1.3
*
* NumberFormatUtil.format(-1.15, "#####.#", RoundingMode.HALF_EVEN) = -1.2
* NumberFormatUtil.format(-1.25, "#####.#", RoundingMode.HALF_EVEN) = -1.2
* NumberFormatUtil.format(-1.251, "#####.#", RoundingMode.HALF_EVEN) = -1.3
* NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#", RoundingMode.HALF_EVEN) = -1.2
* NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#", RoundingMode.HALF_EVEN) = -1.2
* NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#", RoundingMode.HALF_EVEN) = -1.3
* </pre>
*
* </blockquote>
Expand Down
38 changes: 20 additions & 18 deletions src/test/java/com/feilong/core/text/NumberFormatUtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

import org.junit.Test;

import static com.feilong.core.bean.ConvertUtil.toBigDecimal;

/**
* The Class NumberFormatUtilTest.
*
Expand Down Expand Up @@ -118,41 +120,41 @@ public void testFormat2(){
*/
@Test
public void testFormat32(){
assertEquals("1.2", NumberFormatUtil.format(1.15, "#####.#", RoundingMode.HALF_EVEN));
assertEquals("1.2", NumberFormatUtil.format(1.25, "#####.#", RoundingMode.HALF_EVEN));
assertEquals("1.3", NumberFormatUtil.format(1.251, "#####.#", RoundingMode.HALF_EVEN));
assertEquals("1.2", NumberFormatUtil.format(toBigDecimal(1.15), "#####.#", RoundingMode.HALF_EVEN));
assertEquals("1.2", NumberFormatUtil.format(toBigDecimal(1.25), "#####.#", RoundingMode.HALF_EVEN));
assertEquals("1.3", NumberFormatUtil.format(toBigDecimal(1.251), "#####.#", RoundingMode.HALF_EVEN));

assertEquals("-1.2", NumberFormatUtil.format(-1.15, "#####.#", RoundingMode.HALF_EVEN));
assertEquals("-1.2", NumberFormatUtil.format(-1.25, "#####.#", RoundingMode.HALF_EVEN));
assertEquals("-1.3", NumberFormatUtil.format(-1.251, "#####.#", RoundingMode.HALF_EVEN));
assertEquals("-1.2", NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#", RoundingMode.HALF_EVEN));
assertEquals("-1.2", NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#", RoundingMode.HALF_EVEN));
assertEquals("-1.3", NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#", RoundingMode.HALF_EVEN));
}

/**
* Test format 321.
*/
@Test
public void testFormat321(){
assertEquals("1.2", NumberFormatUtil.format(1.15, "#####.#", null));
assertEquals("1.3", NumberFormatUtil.format(1.25, "#####.#", null));
assertEquals("1.3", NumberFormatUtil.format(1.251, "#####.#", null));
assertEquals("1.2", NumberFormatUtil.format(toBigDecimal(1.15), "#####.#", null));
assertEquals("1.3", NumberFormatUtil.format(toBigDecimal(1.25), "#####.#", null));
assertEquals("1.3", NumberFormatUtil.format(toBigDecimal(1.251), "#####.#", null));

assertEquals("-1.2", NumberFormatUtil.format(-1.15, "#####.#", null));
assertEquals("-1.3", NumberFormatUtil.format(-1.25, "#####.#", null));
assertEquals("-1.3", NumberFormatUtil.format(-1.251, "#####.#", null));
assertEquals("-1.2", NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#", null));
assertEquals("-1.3", NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#", null));
assertEquals("-1.3", NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#", null));
}

/**
* Test format 111.
*/
@Test
public void testFormat111(){
assertEquals("1.2", NumberFormatUtil.format(1.15, "#####.#"));
assertEquals("1.3", NumberFormatUtil.format(1.25, "#####.#"));
assertEquals("1.3", NumberFormatUtil.format(1.251, "#####.#"));
assertEquals("1.2", NumberFormatUtil.format(toBigDecimal(1.15), "#####.#"));
assertEquals("1.3", NumberFormatUtil.format(toBigDecimal(1.25), "#####.#"));
assertEquals("1.3", NumberFormatUtil.format(toBigDecimal(1.251), "#####.#"));

assertEquals("-1.2", NumberFormatUtil.format(-1.15, "#####.#"));
assertEquals("-1.3", NumberFormatUtil.format(-1.25, "#####.#"));
assertEquals("-1.3", NumberFormatUtil.format(-1.251, "#####.#"));
assertEquals("-1.2", NumberFormatUtil.format(toBigDecimal(-1.15), "#####.#"));
assertEquals("-1.3", NumberFormatUtil.format(toBigDecimal(-1.25), "#####.#"));
assertEquals("-1.3", NumberFormatUtil.format(toBigDecimal(-1.251), "#####.#"));
}

}

0 comments on commit 4edff59

Please sign in to comment.