91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用BigDecimal去掉小數點后沒用的0

發布時間:2021-08-14 14:17:24 來源:億速云 閱讀:458 作者:chen 欄目:開發技術

本篇內容介紹了“怎么用BigDecimal去掉小數點后沒用的0”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 如題:BigDecimal去掉小數點后沒用的0

    • 解決:BigDecimal,有方法解決stripTrailingZeros()

    • demo

    • 方法二:

  • Java BigDecimal 小數點處理

    • 保留兩位小數

      • 方法一:

      • 方式二:

      • 方式三:

    • 四舍五入

    如題:BigDecimal去掉小數點后沒用的0

    比如:數據庫存儲的是Decimal(5,2)類型保留兩位數。

    如果展示數據5.00,5.10等字樣感覺很不爽,如何做呢?

    只戰術5和5.1

    解決:BigDecimal,有方法解決stripTrailingZeros()

    看源碼:

    /**
         * Returns a string representation of this {@code BigDecimal}
         * without an exponent field.  For values with a positive scale,
         * the number of digits to the right of the decimal point is used
         * to indicate scale.  For values with a zero or negative scale,
         * the resulting string is generated as if the value were
         * converted to a numerically equal value with zero scale and as
         * if all the trailing zeros of the zero scale value were present
         * in the result.
         *
         * The entire string is prefixed by a minus sign character '-'
         * (<tt>'&#92;u002D'</tt>) if the unscaled value is less than
         * zero. No sign character is prefixed if the unscaled value is
         * zero or positive.
         *
         * Note that if the result of this method is passed to the
         * {@linkplain #BigDecimal(String) string constructor}, only the
         * numerical value of this {@code BigDecimal} will necessarily be
         * recovered; the representation of the new {@code BigDecimal}
         * may have a different scale.  In particular, if this
         * {@code BigDecimal} has a negative scale, the string resulting
         * from this method will have a scale of zero when processed by
         * the string constructor.
         *
         * (This method behaves analogously to the {@code toString}
         * method in 1.4 and earlier releases.)
         *
         * @return a string representation of this {@code BigDecimal}
         * without an exponent field.
         * @since 1.5
         * @see #toString()
         * @see #toEngineeringString()
         */
        public String toPlainString() {
            if(scale==0) {
                if(intCompact!=INFLATED) {
                    return Long.toString(intCompact);
                } else {
                    return intVal.toString();
                }
            }
            if(this.scale<0) { // No decimal point
                if(signum()==0) {
                    return "0";
                }
                int tailingZeros = checkScaleNonZero((-(long)scale));
                StringBuilder buf;
                if(intCompact!=INFLATED) {
                    buf = new StringBuilder(20+tailingZeros);
                    buf.append(intCompact);
                } else {
                    String str = intVal.toString();
                    buf = new StringBuilder(str.length()+tailingZeros);
                    buf.append(str);
                }
                for (int i = 0; i < tailingZeros; i++)
                    buf.append('0');
                return buf.toString();
            }
            String str ;
            if(intCompact!=INFLATED) {
                str = Long.toString(Math.abs(intCompact));
            } else {
                str = intVal.abs().toString();
            }
            return getValueString(signum(), str, scale);
        }
     /**
         * Returns a {@code BigDecimal} which is numerically equal to
         * this one but with any trailing zeros removed from the
         * representation.  For example, stripping the trailing zeros from
         * the {@code BigDecimal} value {@code 600.0}, which has
         * [{@code BigInteger}, {@code scale}] components equals to
         * [6000, 1], yields {@code 6E2} with [{@code BigInteger},
         * {@code scale}] components equals to [6, -2].  If
         * this BigDecimal is numerically equal to zero, then
         * {@code BigDecimal.ZERO} is returned.
         *
         * @return a numerically equal {@code BigDecimal} with any
         * trailing zeros removed.
         * @since 1.5
         */
        public BigDecimal stripTrailingZeros() {
            if (intCompact == 0 || (intVal != null && intVal.signum() == 0)) {
                return BigDecimal.ZERO;
            } else if (intCompact != INFLATED) {
                return createAndStripZerosToMatchScale(intCompact, scale, Long.MIN_VALUE);
            } else {
                return createAndStripZerosToMatchScale(intVal, scale, Long.MIN_VALUE);
            }
        }

    demo

    public class StringUtils {
        public static void main(String[] args) {
            System.out.println(BigDecimal.ZERO);
            System.out.println(new BigDecimal("2.0"));
            System.out.println(new Double("0"));
            System.out.println(new BigDecimal("2.00"));
            String d = new BigDecimal("100.10").stripTrailingZeros().toPlainString();
            System.out.println(d);
            System.out.println(new BigDecimal("100.10").stripTrailingZeros().toPlainString());
        }
    }

    結果:

    怎么用BigDecimal去掉小數點后沒用的0

    方法二:

     private static final DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
        public static void main(String[] args) throws Exception{
            System.out.print( "格式化結果:");
            System.out.println(decimalFormat.format(new BigDecimal("10.10")));
        }

    結果:

    怎么用BigDecimal去掉小數點后沒用的0

    Java BigDecimal 小數點處理

    保留兩位小數

    方法一:
    {
       double   c=3.154215;
       java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00");
       String str = myformat.format(c);   
    }
    方式二:
    {
       java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");
       df.format(你要格式化的數字);
       例:new java.text.DecimalFormat("#.00").format(3.1415926)
       #.00 表示兩位小數 #.0000四位小數 以此類推...
    }
    方式三:
    {
       double d = 3.1415926;
       String result = String .format("%.2f");
       %.2f %. 表示 小數點前任意位數   2 表示兩位小數 格式后的結果為f 表示浮點型
    }

    四舍五入

    {
    double   f   =   111231.5585;
    BigDecimal   b   =   new   BigDecimal(f);
    //保留2位小數
    double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    public class PreciseCompute {
    //默認除法運算精度
    private static final int DEF_DIV_SCALE = 10;
     
    /**
    * 提供精確的加法運算。
    * @param v1 被加數
    * @param v2 加數
    * @return 兩個參數的和
    */
     
    public static double add(double v1, double v2) {
       BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.add(b2).doubleValue();
    }
     
    /**
    * 提供精確的減法運算。
    * @param v1 被減數
    * @param v2 減數
    * @return 兩個參數的差
    */
     
    public static double sub(double v1, double v2) {
       BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.subtract(b2).doubleValue();
    }
     
    /**
    * 提供精確的乘法運算。
    * @param v1 被乘數
    * @param v2 乘數
    * @return 兩個參數的積
    */
    public static double mul(double v1, double v2) {
       BigDecimal b1 = new BigDecimal(Double.toString(v1));
       BigDecimal b2 = new BigDecimal(Double.toString(v2));
       return b1.multiply(b2).doubleValue();
    }
     
    /**
    * 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到
    * 小數點以后10位,以后的數字四舍五入。
    * @param v1 被除數
    * @param v2 除數
    * @return 兩個參數的商
    */
     
    public static double div(double v1, double v2) {
       return div(v1, v2, DEF_DIV_SCALE);
    }
     
    /**
    * 提供(相對)精確的除法運算。當發生除不盡的情況時,由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();
    }
     
    /**
    * 提供精確的小數位四舍五入處理。
    * @param v 需要四舍五入的數字
    * @param scale 小數點后保留幾位
    * @return 四舍五入后的結果
    */
    public static double round(double v, int scale) {
       if (scale < 0) {
        throw new IllegalArgumentException(
          "The scale must be a positive integer or zero");
       }
       BigDecimal b = new BigDecimal(Double.toString(v));
       BigDecimal ne = new BigDecimal("1");
       return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }

    my code:

    private BigDecimal formatComma2BigDecimal(Object obj) {
    		String val = String.valueOf(obj);
    		if (val == null)
    			return new BigDecimal("0.00");
     
    		val = val.replaceAll(",", "");
    		if (!isNumber(val))
    			return new BigDecimal("0.00");
     
    		BigDecimal decimal = new BigDecimal(val);
    		decimal = decimal.setScale(2, RoundingMode.HALF_UP); 
    		return decimal;
     
    	}
    	private String formatCommaAnd2Point(Object obj) {
    		BigDecimal decimal = formatComma2BigDecimal(obj);
     
    		DecimalFormat df = new DecimalFormat("#,###.00");
    		String decimalStr = df.format(decimal).equals(".00")?"0.00":df.format(decimal);
    		if(decimalStr.startsWith(".")){
    			decimalStr = "0"+decimalStr;
    		}
    		return decimalStr;
    	}
    	private boolean isDouble(String value) {
    		try {
    			Double.parseDouble(value);
    			if (value.contains("."))
    				return true;
    			return false;
    		} catch (NumberFormatException e) {
    			return false;
    		}
    	}
    	private boolean isInteger(String value) {
    		try {
    			Integer.parseInt(value);
    			return true;
    		} catch (NumberFormatException e) {
    			return false;
    		}
    	}
    	private boolean isNumber(String value) {
    		return isInteger(value) || isDouble(value);
    	}

    “怎么用BigDecimal去掉小數點后沒用的0”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    青阳县| 四子王旗| 伊金霍洛旗| 饶河县| 砀山县| 衢州市| 安义县| 元氏县| 汶川县| 卓资县| 勐海县| 东港市| 华池县| 杭州市| 荆州市| 大港区| 满洲里市| 安化县| 墨竹工卡县| 台安县| 会昌县| 南安市| 玉环县| 许昌县| 井研县| 彭州市| 利津县| 文登市| 丽水市| 南汇区| 抚宁县| 水城县| 奈曼旗| 叶城县| 会昌县| 康保县| 岳阳县| 柳林县| 彭州市| 芷江| 应城市|