如何解决如何解决计算器应用上的 DecimalFormat 错误
我正在制作一个计算器应用。
workingsTV
是显示计算的地方。
resultsTV
是显示计算结果的地方。
workings
正在使用 rhino 的库进行数学运算。
我想在 workingsTV
和 resultsTV
的每三位数字处添加一个逗号。
我尝试像这样将它用于 resultsTV
。
DecimalFormat df = new DecimalFormat("###,###.####",new DecimalFormatSymbols(Locale.US));
result = Double.parseDouble(df.format(result));
但是当显示result
这是错误信息
引起:java.lang.reflect.InvocationTargetException
由:java.lang.NumberFormatException:对于输入字符串:“1,235”
这是代码的顶部
public class MainActivity extends AppCompatActivity {
TextView workingsTV;
TextView resultsTV;
String workings = "";
String CLEAR_INT_TEXT;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTextView();
}
private void initTextView()
{
workingsTV = (TextView)findViewById(R.id.workingsTextView);
resultsTV = (TextView)findViewById(R.id.resultTextView);
}
private void setWorkings(String givenValue)
{
workings = workings + givenValue;
workingsTV.setText(workings);
}
public void equalsOnClick(View view)
{
Double result = null;
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
try {
result = (Double) engine.eval(workings);
if (result != null)
{
DecimalFormat df = new DecimalFormat("###,new DecimalFormatSymbols(Locale.US));
result = Double.parseDouble(df.format(result));
int intVal = (int) result.doubleValue();
if (result == intVal)
{//Check if it's value is equal to its integer part
resultsTV.setText(String.valueOf(intVal));
}
else
{
resultsTV.setText(String.valueOf(result));
}
}
}
解决方法
试试这个:
import java.text.NumberFormat;
import java.util.Locale;
Locale locale = new Locale("en","US");
NumberFormat fmt = NumberFormat.getCurrencyInstance();
System.out.println(fmt.format(1235.00));
,
我正在使用该函数将 double 转换为格式化字符串
public String formatDouble(double value,int digits) {
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setGroupingSeparator(',');
decimalFormatSymbols.setDecimalSeparator('.');
DecimalFormat decimalFormat = new DecimalFormat("###,##0.00",decimalFormatSymbols);
decimalFormat.setMinimumFractionDigits(digits);
decimalFormat.setMaximumFractionDigits(digits);
return decimalFormat.format(value);
}
在您的代码中,您已经有一个结果值 result = (Double) engine.eval(workings);
。你为什么想要第二次?另外,使用格式化字符串,可能会包含非法字符double(逗号)。
去掉那两行
DecimalFormat df = new DecimalFormat("###,###.####",new DecimalFormatSymbols(Locale.US));
result = Double.parseDouble(df.format(result));
当你将它设置为 TextView 时格式化结果值,例如我的函数:
resultsTV.setText(formatDouble(result,4));
在 equalsOnClick() 方法结束时,您应该将 result
或 intVal
设置为 workings
变量以使其为下一步操作做好准备。
workings = String.valueOf(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。