數字安全轉換算法(四捨五入)

private void initview() {
    etSf.setText(5148650+"");
    str = etSf.getText().toString().trim();
    if (str.length() >= 4){
        int safeNumber = safeChageInt(str,0);
        double cf = div(safeNumber,1000,1);
        tvSf.setText(cf+"km");
    }else{
        tvSf.setText(str+"");
    }
}

/**
 * 字符串安全轉化爲int
 *
 * @param in         初始數據
 * @param safeNumber 如果出現異常 顯示的默認的數據
 * @return
 */
public static int safeChageInt(String in, int safeNumber) {
    if (TextUtils.isEmpty(in)) {
        return safeNumber;
    }
    int parseDouble = 0;
    try {
        parseDouble = Integer.parseInt(in);
    } catch (NumberFormatException e) {
        return safeNumber;
    }

    return parseDouble;
}

/**
 * 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指
 * 定精度,以後的數字四捨五入。
 *
 * @param v1    被除數
 * @param v2    除數
 * @param scale 表示表示需要精確到小數點以後幾位。
 * @return 兩個參數的商
 */
public static double div(double v1, double v2, int scale) {
    if (scale < 0) {
        throw new IllegalArgumentException(
                "The scale must be a positive integer or zero");
    }
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}

/**
 * 字符串安全轉化爲Double
 *
 * @param dou        初始數據
 * @param safeNumber 如果出現異常 顯示的默認的數據
 * @return
 */
public static double safeChageDouble(String dou, double safeNumber) {
    if (TextUtils.isEmpty(dou)) {
        return safeNumber;
    }
    double parseDouble = 0.0;
    try {
        parseDouble = Double.parseDouble(dou);
    } catch (NumberFormatException e) {
        return safeNumber;
    }

    return parseDouble;
}

点赞