之前开发时因为对象里有很多属性是大数,最后计算完小数位数太多,这里仿照spring框架里面的源码,写了一个通用转换类,判断属性类型是BigDecimal的话,会对其位数进行处理。
/**
*
* @param target 要操作的对象
* @param digits 保留的小数位数
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static void flashDigits(Object target,Integer digits) throws InvocationTargetException, IllegalAccessException {
Class<?> actualEditable = target.getClass();
PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(actualEditable);
for (PropertyDescriptor targetPd : targetPds) {
Method writeMethod = targetPd.getWriteMethod();
Method readMethod = targetPd.getReadMethod();
if (writeMethod != null && readMethod != null) {
Object value = readMethod.invoke(target);
if (value instanceof BigDecimal) {
BigDecimal b = (BigDecimal) value;
b = b.setScale(digits, BigDecimal.ROUND_HALF_UP);
writeMethod.invoke(target, b);
}
}
}
}
版权声明:本文为krls_shany原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。