package zuny.utiil.number;
import org.apache.commons.lang3.math.NumberUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class NumberUtilsTest {
public static void main(String[] args) {
//用法一:字符串数字转为基本类型(默认值)
//不设置默认值。如果为null或"" 默认值0
int i = NumberUtils.toInt("1");
System.out.println(i);//1
int i1 = NumberUtils.toInt("");
System.out.println(i1);//0
int i2 = NumberUtils.toInt(null);
System.out.println(i2);//0
//如果设置默认值,输出默认值
int i3 = NumberUtils.toInt("", 999);
System.out.println(i3);//999
int i4 = NumberUtils.toInt("1", 000);
System.out.println(i4);//1 当有值时,输出当前值
/**
* 其他类型同理
* toLong 默认值 0L
* toFloat 默认值0.0f
* toDouble 默认值0.0d
* ......
*/
/**
* toScaledBigDecimal() 将值转为BigDecimal 可以作用于 bigDecimal、float、double、String
* 看源码知:默认保留两位并采用 BigDecimal.ROUND_HALF_EVEN(银行家算法)
* 其算法的思想是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
*
*/
BigDecimal bigDecimal = NumberUtils.toScaledBigDecimal(3.5);
System.out.println(bigDecimal);//3.50
BigDecimal bigDecimal1 = NumberUtils.toScaledBigDecimal("3.568");
System.out.println(bigDecimal1);//3.57
//todo 验证算法思想
BigDecimal bigDecimal2 = NumberUtils.toScaledBigDecimal(3.644);
System.out.println(bigDecimal2);//3.64 4舍弃
BigDecimal bigDecimal3 = NumberUtils.toScaledBigDecimal(3.666);
System.out.println(bigDecimal3);//3.67 6入
BigDecimal bigDecimal4 = NumberUtils.toScaledBigDecimal(3.6651);
System.out.println(bigDecimal4);//3.67 5后非0就进1
BigDecimal bigDecimal5 = NumberUtils.toScaledBigDecimal(3.6650);
System.out.println(bigDecimal5);//3.66 五后为零看奇偶,五前为偶应舍去,五前为奇要进一(5的前面是6为偶数)
BigDecimal bigDecimal6 = NumberUtils.toScaledBigDecimal(3.6550);
System.out.println(bigDecimal6);//3.66 (5前面是5为奇数 要进1)
/**
* 自定义保留几位小数,和采用的算法
*/
BigDecimal bigDecimal7 = NumberUtils.toScaledBigDecimal(3.5679, 3,
RoundingMode.valueOf(BigDecimal.ROUND_DOWN));
System.out.println(bigDecimal7);//3.567
//HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),RoundingMode.HALF_EVEN相当于BigDecimal.ROUND_HALF_DOWN四舍五入
BigDecimal bigDecimal8 = NumberUtils.toScaledBigDecimal(3.5679, 3, RoundingMode.HALF_EVEN);
System.out.println(bigDecimal8);//3.568
//用法二:create...
Number number = NumberUtils.createNumber("1");
System.out.println(number);//1
// Number number1 = NumberUtils.createNumber(""); //A blank string is not a valid number
Number number2 = NumberUtils.createNumber(null);
System.out.println(number2);//null
// Number asvda = NumberUtils.createNumber("asvda"); //asvda is not a valid number.
//Float aFloat = NumberUtils.createFloat(""); //empty String
Float aFloat1 = NumberUtils.createFloat(null);
System.out.println(aFloat1);//null
Float aFloat = NumberUtils.createFloat("12");
System.out.println(aFloat);//12.0
/**
* 其他 Integer、Long、Double、BigInteger 同理
*/
//用法三:最小、最大值 long、int、short、byte、double、float
//数组不能为空
int max1 = NumberUtils.max(new int[]{1, 5, 9});
System.out.println(max1);//9
int max = NumberUtils.max(1, 2, 3, 4, 5, 6);
System.out.println(max);//6
int min = NumberUtils.min(1, 2, 3, 4, 5, 6);
System.out.println(min);//1
//用法四 检验
//isCreatable
System.out.println(NumberUtils.isCreatable("3.4")); // true
// isDigits 判断字符串中是否全为数字
System.out.println(NumberUtils.isDigits("12.0")); // false
System.out.println(NumberUtils.isDigits("123")); // true
//用法五:比较 compare
//compare 比较两个数的大小,参数1比参数2大,返回1,小返回-1,等返回0
System.out.println(NumberUtils.compare(2,1));//1
System.out.println(NumberUtils.compare(1, 2)); // -1
System.out.println(NumberUtils.compare(1,1)); //0
System.out.println(NumberUtils.compare(-2,-1));//-1
}
}
字符串数字转int并设置初始值--->NumberUtils用法
于 2023-10-08 16:19:19 首次发布