当我在另一台计算机上执行应用程序时,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值中删除所有前导零!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...