关于数据小数位数的四舍五入及小数位数的截断做法
在平时的项目开发过程中,经常需要对浮点数的小数位数进行截取,这涉及两方面的问题
1:在截取小数位数时,对多出的小数位直接截断,不四舍五入,
如 float a = 3.2359f;当要保留三位小数时,截取后的数应为 a = 3.235f;
2:在截取小数位数时,对多出的小数位进行四舍五入后再截断,
如 float a = 3.2359f;当要保留三位小数时,截取后的数应为 a = 3.236f;
下面是针对这两种情况的做法,如下:
情况1:
/**
* 对数据的小数位数进行截断(非四舍五入)
* @param inputNum 输入的原始数据
* @param minFractionDigits 保留的小数位数(多出的小数进行截断,不四舍五入)
* @return 返回对原始数据进行小数位数截取后的数字
*/
public static float cutNumber(float inputNum,int minFractionDigits)
{
System.out.println("-------对数据的小数位数进行截断(非四舍五入)操作--------");
System.out.println("输入参数: ");
System.out.println("inputNum: " + inputNum);
System.out.println("minFractionDigits: " + minFractionDigits);
float value = (new BigDecimal(inputNum).setScale(
minFractionDigits, BigDecimal.ROUND_DOWN)).floatValue();
System.out.println("输出结果: ");
System.out.println("value: " + value);
return value;
}
运行后的结果为:
-------对数据的小数位数进行截断(非四舍五入)操作--------
输入参数:
inputNum: 23.2369
minFractionDigits: 3
输出结果:
value: 23.236
情况2:
/**
* 对数据的小数位数进行四舍五入(非截断)
* @param inputNum 输入的原始数据
* @param minFractionDigits 保留的小数位数(多出的小数四舍五入,非截断)
* @return 返回对原始数据进行小数位数四舍五入后的数字
*/
public static String roundNumber(float inputNum,int minFractionDigits)
{
System.out.println("-------对数据的小数位数进行四舍五入(非截断)操作--------");
System.out.println("输入参数: ");
System.out.println("inputNum: " + inputNum);
System.out.println("minFractionDigits: " + minFractionDigits);
float value = (new BigDecimal(inputNum).setScale(
minFractionDigits, BigDecimal.ROUND_HALF_UP)).floatValue();
System.out.println("输出结果: ");
System.out.println("value: " + value);
return null;
}
运行结果为:
-------对数据的小数位数进行四舍五入(非截断)操作--------
输入参数:
inputNum: 23.2369
minFractionDigits: 3
输出结果:
value: 23.237