package com.steering.jobface.qcm.task;

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class RoundGBT81702008 {
	
	/**
	 * 拟舍弃数字的最左边一位数字小于5，则舍去，保留其余各位数不变
	 * 拟舍弃数字的最左边一位数字大于5，则进一，即保留数字的末位数字加1
	 * 拟舍弃数字的最左一位数字是5，且其后有非0数字时进一，即保留数字的末位数字加1
	 * @param value
	 * @return
	 */
	public static double round3_2(double value, int round){
		// 12.14
//		String strValue = String.valueOf(value);
//		boolean addOne = false;
//		if(strValue.contains(".")){
//			String[] aryValues = strValue.split(".");
//			if(aryValues[1].length() > round){
//				String left = aryValues[1].substring(0, round - 1);
//				String right = aryValues[1].substring(round, round + 1);
//				strValue = aryValues[0] + left;
//				if(Integer.parseInt(right) < 5){
//					addOne = false;
//				}else if(Integer.parseInt(right) > 5){
//					addOne = true;
//				}else{
//					if(aryValues[1].length() >= round + 2){
//						String right2 = aryValues[1].substring(round + 1, round + 2);
//						if(Integer.parseInt(right2) > 0){
//							addOne = true;
//						}else{
//							addOne = false;
//						}
//					}
//				}
//			}
//		}
//		
//		if(addOne){
//			return Double.parseDouble(strValue) + 1;
//		}else{
//			return Double.parseDouble(strValue);
//		}
		
		NumberFormat nfFormat = NumberFormat.getInstance();  
        nfFormat.setMaximumFractionDigits(round);
        nfFormat.setGroupingUsed(false);
        return Double.parseDouble(nfFormat.format(value));
	}
	
	/**
	 * 拟舍弃数字的最左边一位数字小于5，则舍去，保留其余各位数不变
	 * 拟舍弃数字的最左边一位数字大于5，则进一，即保留数字的末位数字加1
	 * 拟舍弃数字的最左一位数字是5，且其后有非0数字时进一，即保留数字的末位数字加1
	 * @param value
	 * @return
	 */
	public static String round3_2String(double value, int round){
		String format = "0";
		for(int i = 0; i < round; i++){
			if(i == 0){
				format += ".0";
			}else{
				format += "0";
			}
		}
		DecimalFormat nfFormat = new DecimalFormat(format); 
        nfFormat.setMaximumFractionDigits(round);
        nfFormat.setGroupingUsed(false);
        return nfFormat.format(value);
	}
	
	/**
	 * 0.5单位修约
	 * 0.5单位修约是指按指定修约间隔对你修约的数值0.5单位进行的修约。
	 * 0.5单位修约的方法如下：将拟修约数值X乘以2，按指定修约间隔对2X依
	 * 3.2的规定修约，所得数值（2X修约值）再除以2。
	 * @param value
	 * @return
	 */
	public static double round3_4_1(double value){
		value = value * 2;
		value = round3_2(value, 0);
		value = value / 2;
		return value;
	}
	
	/**
	 * 0.2单位修约
	 * 
	 * @param value
	 * @return
	 */
	public static double round3_4_2(double value){
		value = value * 5;
		value = round3_2(value, 0);
		value = value / 5;
		return value;
	}
	
	/**
	 * 0.1单位修约 （没有3.4.3 自己造的。）
	 * 
	 * @param value
	 * @return
	 */
	public static double round3_4_3(double value){
		value = value * 10;
		value = round3_2(value, 0);
		value = value / 10;
		return value;
	}
	
	/**
     * 水压英制圆整 
     * @param value 公制压力
     * @param psi
     * @return
     */
    public static double roundPsi(double value, int psi){
    	value = value * 145;
    	value = value / psi;
    	value = round3_2(value, 0);
    	value = value * psi;
    	return value;
    }
}
