JAVA中字符串到大小数的转换

JAVA中字符串到大小数的转换,java,string,bigdecimal,numberformatexception,Java,String,Bigdecimal,Numberformatexception,我试图将字符串存储到数据类型为Big Decimal的列中 String a = transaction.getBeneAmt(); log.info(a); tran.setTransAmt(new BigDecimal(transaction.getBeneAmt())); tranRepository.saveAndFlush(trangloTran); //save into database 但我明白了 2017-07-05 18:04:19 [http-nio-8080-exec-

我试图将字符串存储到数据类型为Big Decimal的列中

String a = transaction.getBeneAmt();
log.info(a);
tran.setTransAmt(new BigDecimal(transaction.getBeneAmt()));
tranRepository.saveAndFlush(trangloTran); //save into database
但我明白了

2017-07-05 18:04:19 [http-nio-8080-exec-1] INFO  ApiController - IDR 3,000,000.00
2017-07-05 18:04:19 [http-nio-8080-exec-1] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NumberFormatException] with root cause
java.lang.NumberFormatException: null
    at java.math.BigDecimal.<init>(BigDecimal.java:494)
    at java.math.BigDecimal.<init>(BigDecimal.java:383)
    at java.math.BigDecimal.<init>(BigDecimal.java:806)
2017-07-05 18:04:19[http-nio-8080-exec-1]信息ApiController-IDR 3000000.00
2017-07-05 18:04:19[http-nio-8080-exec-1]错误o.a.c.c.c.[dispatcherServlet]-路径[]上下文中的Servlet[dispatcherServlet]的Servlet.service()引发异常[Request processing failed;嵌套异常为java.lang.NumberFormatException],其根本原因是
java.lang.NumberFormatException:null
在java.math.BigDecimal.(BigDecimal.java:494)
在java.math.BigDecimal.(BigDecimal.java:383)
在java.math.BigDecimal.(BigDecimal.java:806)

这里的问题是,您的字符串包含字母字符,因此无法将其转换为
BigDecimal
,这就是为什么会出现
NumberFormatException

在尝试转换之前,您需要替换这些字母字符:

String a = transaction.getBeneAmt();
log.info(a);
tran.setTransAmt(new BigDecimal(a.replaceAll("[a-zA-Z,]", "").trim()));
tranRepository.saveAndFlush(trangloTran);

约翰,你真的想把大十进制转换成字符串吗?正如我在你的代码中看到的,你正试图把字符串转换成大十进制Decimal@Andreas:NumberFormatException!=NullPointerException。那么,为什么您希望
BigDecimal(String)
能够解析它?您希望它只是删除前导的“IDR”吗部分?文档是否建议这样做?@John
BigDecimal
用于数字,例如,
3000000.00
是有效数字。
3000000.00
不是
BigDecimal
的有效数字。
IDR
货币前缀也不是数字的有效部分。因此,
BigDecimal
无法存储数字使用货币表示的金额值。@John,您是否尝试了提供的解决方案,但该解决方案无法帮助您存储IDR仍然无法工作,因为
“3000000.00”
不是的有效值。@Andreas是的,我错过了
部分。谢谢您,我编辑了答案