3

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

如果你去商店买了一个鸡蛋十二次,你只需支付 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>
4

2 回答 2

1

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

于 2013-11-10T21:05:02.253 回答
1

正如 NickT 所说,HALF-EVEN 舍入工作正常。DecimalFormat 上的 Android 文档说:

如果实际小数位数超过最大小数位数,则对最大小数位数执行半偶数舍入。例如,如果最大小数位数为 2,则 0.125 的格式为“0.12”。

由于它被记录为以这种方式工作,因此它不是错误。

于 2013-11-10T21:15:59.283 回答