如果一打鸡蛋的价格是 1.50 美元,DecimalFormat 表示一个鸡蛋的价格是 0.12 而不是 0.13

如果你去商店买了 12 次鸡蛋,你只需支付 1.44 美元

但如果每打的价格是 1.51,它给出了正确的答案。

显然 DecimalFormat 使用此规则进行四舍五入:

“如果余数大于 (>) 5,则四舍五入”

它应该使用这个规则:

“如果余数大于或等于 (>=) 5,则四舍五入”

下面是一个简单的 Android 项目来演示这一点。

如果我是正确的,向 Google 报告此错误的程序是什么?

package Egg.Price;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class MyEggPrice extends Activity
{  double        xPricePerDozen, xPricePerEgg;
   NumberFormat  xMoney = new DecimalFormat("0.00");
   TextView thePrice;
   String   xString;
      @Override
      public void onCreate(Bundle savedInstanceState)
      {   super.onCreate(savedInstanceState);
           setContentView(R.layout.main_egg);

           xPricePerDozen   = 1.50; //user would normally enter via an EditText
           xPricePerEgg     = (xPricePerDozen / 12);
           xString        = xMoney.format(xPricePerEgg);
           thePrice       = (TextView) findViewById(R.id.the_price);
           thePrice.setText(xString);
        }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"    android:layout_height="fill_parent"
    >
<TextView   android:text="Price Per Egg"
    android:layout_width="fill_parent"    android:layout_height="30dip"
    />
<TextView   android:id="@+id/the_price"
    android:layout_width="fill_parent"    android:layout_height=30dip"
    />
</LinearLayout>

最佳答案

不,你错了。默认舍入模式为 HALF_EVEN,在这种情况下,1.25 舍入为 1.2。 1.35 将四舍五入为 1.4。

关于Android DecimalFormat 不能正确 rRoundUp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19894988/

10-12 04:13