十进制格式的输出字符串限制为2 dp

时间:2013-01-29 19:01:55

标签: android format decimal

坚持这个,我确定有一个简单的解决方案,只是无法解决!

我尝试过decmialformat,numberformat,string.format()等,但没有任何效果。

下面的代码,我想计算只显示输出限制为2位小数。花了最后2个小时尝试各种方法,所有这些都导致应用程序在运行时崩溃...

    Output = (Output1 / (1 -(Output2/100)))

    String OutputString = String.valueOf(Output);

    Num.setText(OutputString);

3 个答案:

答案 0 :(得分:1)

试试这个:

String OutputString = String.format("%.2f", Output);

Num.setText(OutputString);

String.format()确保您的输出中只有2位小数。

答案 1 :(得分:0)

请试试这个:

double Output = (Output1 / (1 -(Output2/100d)))
Num.setText(String.format("%.2f",Output));

希望这能解决您的问题。 最好的问候

答案 2 :(得分:0)

如果您想限制'decimal_point'之前和之后的数字位数,那么您可以使用我的解决方案。

private class DecimalNumberFormatTextWatcher implements TextWatcher{
    int pos;
    int digitsBeforeDecimal = 6;
    int digitsAfterDecimal = 2;
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        if(s.length() > 2)
            pos = start;
        else {
            pos = start + 2;
        }
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        mEdittext.removeTextChangedListener(this);
        String text = s.toString();
        if(text!= null && !text.equals("")){
            if(!text.contains("$")){ //if it does not contains $
                text = "$"+text;
            } else {
                if (text.indexOf("$") > 0) { //user entered value before $
                    text = s.delete(0, text.indexOf("$")).toString();
                }else {
                    if(!text.contains(".")){ // not a fractional value
                        if(text.length() > digitsBeforeDecimal+1) { //cannot be more than 6 digits
                            text = s.delete(pos, pos+1).toString();
                        }
                    } else { //a fractional value
                        if(text.indexOf(".") - text.indexOf("$") > digitsBeforeDecimal+1){ //non fractional part cannot be more than 6
                            text = s.delete(pos,pos+1).toString();
                        }
                        if((text.length() - text.indexOf(".")) > digitsAfterDecimal+1) { //fractinal part cannot be more than 2 digits
                            text = s.delete(text.indexOf(".") + 2, text.length() - 1).toString();
                        }
                    }
                }
            }
        }
        mEdittext.setText(text);
        mEdittext.setSelection(pos);
        mEdittext.addTextChangedListener(this);
    }
}

mEdittext.addTextChangedListener(new DecimalNumberFormatTextWatcher());

一旦用户输入值,这也会添加货币符号。

希望这有助于任何人。