【问题标题】:Issue in showing the Decimal part of the Number显示数字的小数部分的问题
【发布时间】:2013-06-08 09:02:23
【问题描述】:

我正在努力创建一个计算器,但在显示数字后的小数部分时遇到了一些问题。我有计算器上的键是 1,2,3,4,5,6,7,8,9,0,00 和一个退格键

按 1 会显示 0.01

然后按 2 o/p 0.12

然后按 3 o/p 1.23

就像我们将添加在屏幕上显示的数字一样。以下是我用来执行此任务的代码

      @Override
            public void onClick(View v) {
                switch (v.getId()) {
                case R.id.number1:
                    calcValue(.01);
                break;
                case R.id.number2:
                    calcValue(.02);
                    break;
                case R.id.number3:
                    calcValue(.03);
                    break;
                case R.id.number4:
                    calcValue(.04);
                    break;
                case R.id.number5:
                    calcValue(.05);
                    break;
                case R.id.number6:
                    calcValue(.06);
                    break;
                case R.id.number7:
                    calcValue(.07);
                    break;
                case R.id.number8:
                    calcValue(.08);
                    break;
                case R.id.number9:
                    calcValue(.09);
                    break;
                case R.id.number0:
                    enteredAmt = enteredAmt * 10.0 +(.0 * 100)/ 100.0;
                    roundEnteredPrice();
                    roundMyData(enteredAmt,2);

                    System.out.println("enteredAmt before:"+enteredAmt);
                    enteredAmt = (enteredAmt*100.0)/100.0;
                    System.out.println("enteredAmt after:"+enteredAmt);
                    valueEnteredTextview.setText(""+enteredAmt);
                    break;
                case R.id.number00:
                    enteredAmt = enteredAmt * 100.0 + Math.floor(.0 * 100)/ 100.0;
                    roundEnteredPrice();
                    roundMyData(enteredAmt,2);
                    System.out.println("enteredAmt before:"+enteredAmt);
                    enteredAmt = (enteredAmt*100.0)/100.0;
                    System.out.println("enteredAmt after:"+enteredAmt);
                    valueEnteredTextview.setText(""+enteredAmt);
                    break;
                case R.id.backspaceButton:
                    enteredAmt = 0.00;
                    valueEnteredTextview.setText("$" +0.00);
                    break;
    }
    private void calcValue(double d) {
                enteredAmt = enteredAmt + Math.floor(d * 100)/ 100.0;
                System.out.println("enteredAmt befor:"+enteredAmt);
                enteredAmt = (Math.floor(enteredAmt*100.0)/100.0);
                System.out.println("enteredAmt after:"+enteredAmt);
                valueEnteredTextview.setText(""+enteredAmt);
            }

private void roundEnteredPrice() {
        BigDecimal bd = new BigDecimal(enteredAmt);
        BigDecimal res = bd.setScale(2, RoundingMode.FLOOR);
        System.out.println("Big Decimal" + res.toPlainString());
        double entered = Double.parseDouble(res.toPlainString());
        System.out.println("Entered Amount: "+entered);
    }

    private void roundMyData(double enteredAmt2, int numberOfDigitsAfterDecimal) {
        double p = (float)Math.pow(10,numberOfDigitsAfterDecimal);
        enteredAmt2 = enteredAmt2 * p;
        double tmp = Math.floor(enteredAmt2)/p;
        System.out.println("~~~~~~tmp~~~~~"+tmp);   

现在我的问题是它没有显示最后输入的零 就像我输入 1,2,0 一样,预期显示的值为 1.20,但 显示为 1.2 如果我按下一个数字,那么它会显示零,就像我按 4 一样,输出是 12.04

我尝试过使用 Big Decimal,它也给了我们零,但有时证明了一些有线结果,比如如果我输入 1,0,2,0,预期值为 10.20,但它给出的值为 10.19。 建议我做点什么以及我做错了什么。

【问题讨论】:

    标签: java android double decimal number-formatting


    【解决方案1】:

    使用String.Format

    String value = String.format(Locale.ENGLISH, "%.2f", yourValue);
    

    【讨论】:

      【解决方案2】:

      使用格式化程序来格式化十进制值

      DecimalFormat df = new DecimalFormat("#.0");
      

      【讨论】:

        【解决方案3】:

        您需要根据需要使用DecimalFormat 对其进行格式化:

        double d = 1.234567;
        DecimalFormat df = new DecimalFormat("#.00");
        System.out.print(df.format(d));
        

        【讨论】:

        • 我尝试过使用 DecimalFormat 但它没有打印 零在最后。喜欢它将 1.20 打印为 1.2
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2018-03-15
        相关资源
        最近更新 更多