Java float保留n位小数做法
前言
对于Java float的结果想要保留一定的位数,而且需要四舍五入时,可以采用Math.round()处理,该方法是直接返回整数。还可以用DecimalFormat类,或者BigDecimal类的setScale()方法。
一、案例
有一个特别的分数数列,前一个数的分母作为后一个数的分子,后一个数的分母等于前一个数分子和分母之和,如n=4,1/2,2/3,3/5,5/8,求数列的和。
二、三种Java float的小数保留方法
package kdxf;
public class SeqSum {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* <p>
* 求取指定长度序列的和
*
* @param n int整型 序列长度
* @return float浮点型
*/
public float seqSum(int n) {
// 要求保留两位小数。
// write code here
float a = 1f, b = 2f, sum = 0f;
while (n-- > 0) {
sum += a / b;
float t = a;
a = b;
b += t;
}
// (int)(sum * 100) / 100f 不能四舍五入
// 方案1:Math.round配合浮点数放大与缩小来保留n位小数。
// return Math.round(sum * 100) / 100f;
// 方案2:用DecimalFormat类进行format,当然也能format成其他格式,如千分位格式。
// return new DecimalFormat("0.00").format(sum);
// 方案3:用BigDecimal类
// return new BigDecimal(sum).setScale(2,BigDecimal.ROUND_HALF_DOWN).floatValue();
// setScale()格式化浮点数,第二个参数默认四舍五入;
// ROUND_DOWN直接删除后面的多余小数;ROUND_UP做直接进位处理;ROUND_HALF_UP/DOWN当小数为5时,向上进位/向下舍去。
return Math.round(sum * 100) / 100f;
}
}
总结
1)通过Math.round() + 对数字的放大和缩小来四舍五入;
2)通过DecimalFormat类来format浮点数;
3)通过BigDecimal类的setScale()方法来进行四舍五入。