2

我在 editText 中格式化数字时遇到问题。我希望用户能够以正整数或负整数(5 或 -5)的形式输入一个数字,并将其格式化为十进制 (.05)。目前,它的格式为 .05.0 而不是 .05,我不知道为什么。此外,如果用户输入错误的文本或将字段留空,我想将 editText 设置为“0”。但是,我得到了一个错误。非常感谢任何帮助。

public void checkPremium(){
     double number = Double.parseDouble(premium.getText().toString());
     if(premium.getText().toString().equals(".")||premium.getText().toString().equals("-.")||premium.getText().toString().equals("")){
         premium.setText("0");
     }else if(number >= 1 || number < 10){
         premium.setText(".0"+number);
     }else if(number >= 10){
         premium.setText("."+number);
     }else if(number <= -1 || number > -10){
         premium.setText(".0"+Math.abs(number));
     }else if(number <= -10){
         premium.setText("."+Math.abs(number));
     }else if(number <1 || number >0){
           //Do Nothing
         }       
 }
4

4 回答 4

1

Double 解析器将“.0”添加到您的号码中。你最好添加你的字符串而不是你解析的双精度。

于 2012-07-24T06:29:09.537 回答
0

如果您不想在 edittext 字段中出现任何其他错误字符或空格,最好使用 try 和 catch 块

这是代码,希望您会发现它有用。

          try{
                 number = Double.parseDouble(premium.getText().toString());

                 if(number >= 1 || number < 10){
                     premium.setText(String.valueOf(.01*number));
                 }else if(number >= 10){
                     premium.setText(String.valueOf(.1*number));
                 }else if(number <= -1 || number > -10){
                     premium.setText(String.valueOf(0.01*Math.abs(number)));
                 }else if(number <= -10){
                     premium.setText(String.valueOf(0.1*Math.abs(number)));
                 }else if(number <1 || number >0){
                       //Do Nothing
                 }

             }catch(Exception e)
             {
                 premium.setText("0");
             }
于 2012-07-24T07:55:08.587 回答
0

使用十进制格式化程序或字符串说明符。检查以下答案。: 如何在 Android 中打印带两位小数的双精度数?

于 2012-07-24T06:32:49.307 回答
0

更简单的代码是:

Double number = Double.parseDouble(premium.getText().toString());
if (number.isInfinite() || number.isNan()) number = 0F;
premium.setText(String.format("%.2f", Math.abs(number)/100);

希望这可以帮助...

于 2012-07-24T07:44:14.027 回答