卵 12 個の価格が $1.50 の場合、DecimalFormat は、卵 1 個の価格が 0.13 ではなく 0.12 であることを示します。
店に行って 1 つの卵を 12 回購入した場合、1.44 ドルしか支払うことはありません。
しかし、ダースあたりの価格が 1.51 の場合、適切な答えが得られます。
どうやら DecimalFormat は丸めにこのルールを使用しています:
「余りが (>) 5 より大きい場合は切り上げ」
次のルールを使用する必要があります。
「余りが OR EQUAL TO (>=) 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>