如何解决当我在另一台计算机上执行应用程序时,BigDecimal NumberFormatException
大家好,我在执行此代码时遇到错误 它在我的计算机上可以正常工作,但是当我将应用程序发送给朋友尝试时,它导致了数字格式异常,代码是否存在问题?如果可以,为什么它可以在我的计算机上工作 ps:我在另一台计算机上尝试了该应用程序,并且可以正常工作
double total = 0;
//here there is a for loop changing the total value
//but in this case (when the application starts) the loop condition will be false
//so the total will stay 0
String totalS = String.format("%.2f",total);
if (totalS.endsWith(".00")) {
totalS = totalS.substring(0,totalS.length()-3);
}
lblDa.setText(new BigDecimal(totalS).toPlainString() +" DA");
编辑:这是错误消息
java.lang.NumberFormatException: Character,is neither a decimal digit number,decimal point,nor "e" notation exponential mark.
at java.base/java.math.BigDecimal.<init>(BigDecimal.java:519)
at java.base/java.math.BigDecimal.<init>(BigDecimal.java:402)
at java.base/java.math.BigDecimal.<init>(BigDecimal.java:835)
at invpack.MainFrame.updateTotal(MainFrame.java:3052)
at invpack.MainFrame.initialize(MainFrame.java:557)
at invpack.MainFrame.<init>(MainFrame.java:185)
at invpack.MainFrame$1.run(MainFrame.java:171)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
解决方法
您正在使用的String.format
方法从用户首选项中查找有关数字格式的详细信息:它可以使用“,”代替“”。对于小数点分隔符,它甚至可以使用0-9以外的数字。程序的其余部分假定生成的字符串使用ASCII数字和“。”。十进制分隔符。
当您需要String.format
来生成特定样式的数字时,请传递固定的Locale参数:
String totalS = String.format(Locale.ROOT,"%.2f",total);
另一方面,似乎所有这些代码都仅存在,因此您不会显示尾随零。有一种更简单的方法可以实现:使用数字格式,使尾随零成为可选。
DecimalFormat formatter = new DecimalFormat("0.##");
lblDa.setText(formatter.format(total) +" DA");
,
String s = new DecimalFormat(“ 0。####”)。format(Double.parseDouble(value));
它将从任何double值中删除所有前导零!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。