如何在显示时停止数字来自舍入?

时间:2012-03-01 22:42:25

标签: java android database string listview

在我的应用程序中我显示数字字符串并注意到“7.000444”显示为“7.00044”。另外,“0.567567”显示为“0.56757”。最后,添加任何非数字部分(即字母)使它们显示全部数字,然后显示另一个键。有没有办法阻止前两个行为?我通过将它添加到数据库然后显示在ListView中来显示它们。创建字符串的代码是一组按钮,按钮0-9是:

Button one;
one = (Button)findViewById(R.id.one);
one.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            working = BigDecimal.valueOf(1);
            now = working.toString();
            total1 = total.concat(now);
            equation1 = equation.concat(now);
            equation = equation1;
            total = total1;
            if(b){mnDbHelper.updateNote(equation, mnDbHelper.testCount());}
            else{mnDbHelper.createNote(equation);
            b=true;}
            fillData();
        }
});

根据需要更改1。 小数点按钮如下:

Button decimal;
decimal = (Button)findViewById(R.id.decimal);
decimal.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            now = ".";
            equation1 = equation.concat(now);
            total1 = total.concat(now);
            equation = equation1;
            total = total1;
            if(b){mnDbHelper.updateNote(equation, mnDbHelper.testCount());}
            else{mnDbHelper.createNote(equation);
            b=true;}
            fillData();
        }

});

以下是FillData的代码:

private void fillData() {
    // Get all of the notes from the database and create the item list
    Cursor c = mnDbHelper.fetchAllNotes();

    startManagingCursor(c);

   String[] columns = new String[] {EquationsDbAdapter.KEY_VALUE};

   int to[] = new int[] {android.R.id.text1};

   SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1 ,c , columns , to);

   setListAdapter(adapter);

}

以下是其他一个按钮的示例代码:

  Button times;
        times = (Button)findViewById(R.id.times);
        times.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                now = "*";
                equation1 = equation.concat(now);r = equation;
                equation = equation1;z = equation;
                if(total!="")
                {try{
                    formatter.parse(total);
                }
                catch(Throwable t){
                    really = false;
                }
                if(really){
                    try {
                        mDbHelper.createNote((BigDecimal) formatter.parse(total), fa, fa, fa, fa, fa, fa, jkl, fa, fa);
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                total = "";
                total1 = "";}
                else{really = true;}}
                mDbHelper.createNote(jkl, fa, fa, t, fa, fa, fa, jkl, fa, fa);
                if(b){mnDbHelper.updateNote(equation, mnDbHelper.testCount());}
                else{mnDbHelper.createNote(equation);
                b=true;}
                fillData();
            }
    });

格式化程序如下:

 DecimalFormat formatter = new DecimalFormat("##################################################################################.################################");

编辑:奇怪的是,显示的“0.33333333”显示不正确,但是当添加*时,确实如此,但是当再次从中减去*时它不会。 一如既往,非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

修改

咦。那问题似乎不在formatter对象中。除非已调用Double,否则会返回setParseBigDecimal(true),但如果您尝试将Double转换为BigDecimal,则会收到强制转换错误。我不认为你需要格式化程序,应该调用以下内容但我没有看到导致截断的地方:

new BigDecimal(total)

怀疑你从某个地方Stringdoublefloat,这会截断BigDecimal的精确度。例如,你确定你没有这样做:

working = BigDecimal.valueOf((double)value);

确保您使用String的{​​{1}}构造函数:

BigDecimal

这会对字符串进行逐字符处理,以创建working = new BigDecimal(valueStr); 而不会丢失精度。

如果你提供更多详细信息(比如许多评论已经提出)并显示实际创建BigDecimal的代码,那么我将编辑我的答案以提供更多信息。


代码:

BigDecimal

不对。您很少想要将字符串与if(total!="") ==进行比较。我怀疑应该是:

!=

或者

if (!("".equals(total)))

答案 1 :(得分:1)

这非常有趣,因为显而易见的是,double而非BigDecimal并非如此。 你提到了数据库。也许您从数据库重新加载字段,记录字段为DOUBLE而非DECIMAL,或DECIMAL错误精度

答案 2 :(得分:0)

我最终做的只是在字符串的开头添加一个空格,这很有效。