1.操作double和float类型的变量
因为double和float是非精度数值,所以操作这样的变量容易丢失精度。
(1)double四舍五入保留两位小数及多位
double f = 111231.5585;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
(2)float四舍五入保留两位小数及多位
float f = 34.232323;
BigDecimal b = new BigDecimal(f);
float f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
// b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
2.统计数值百分比
/**
* 统计两个数逐渐减小的百分比
*
* @param args
*/
public static void main(String[] args) {
int num1 = 7;
int num2 = 6;
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String result = numberFormat.format((float) num2 / (float) num1 * 100);
System.out.println("num1和num2的百分比为:" + result + "%");
}
3.计算数值数组之间的差值,并输出最大差值
/**
* 计算数组之间的差值,找到最大值
* @param args
*/
public static void main(String[] args) {
String sed = "16666,16496,16341,15237,14461,9990,8912,7293,22,22,20,20,20,20,20,20,20,20,11,11,10,9,9,9,9,5,0,0";
// String[] dd = {"5","50","500","501","1501"};
String[] dd = sed.split(",");
double ss = 0;
double str = 0;
Map<Integer,Double> strMap = new HashMap<>();
for (int i = 0; i < dd.length; i++) {
if(ss == 0){
ss = Double.parseDouble(dd[i]);
}else{
str = ss - Double.parseDouble(dd[i]);
strMap.put(i, str);
ss = Double.parseDouble(dd[i]);
}
}
//这里将map.entrySet()转换成list
List<Map.Entry<Integer,Double>> list = new ArrayList<Map.Entry<Integer,Double>>(strMap.entrySet());
//通过比较器实现比较排序
Collections.sort(list, new Comparator<Map.Entry<Integer,Double>>() {
@Override
public int compare(Entry<Integer, Double> o1,
Entry<Integer, Double> o2) {
// return o1.getValue().compareTo (o2.getValue()); //升序
return o2.getValue().compareTo (o1.getValue()); //倒序
}
});
System.out.println("差值最大数:" + list.get(0).getValue());
for(Map.Entry<Integer,Double> mapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}