进击的数值算法

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()); 
        } 
	}

猜你喜欢

转载自blog.csdn.net/wang_snake/article/details/81660963