JAVA中字符串到大小数的转换
我试图将字符串存储到数据类型为Big Decimal的列中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-
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”吗部分?文档是否建议这样做?@JohnBigDecimal
用于数字,例如,3000000.00
是有效数字。3000000.00
不是BigDecimal
的有效数字。IDR
货币前缀也不是数字的有效部分。因此,BigDecimal
无法存储数字使用货币表示的金额值。@John,您是否尝试了提供的解决方案,但该解决方案无法帮助您存储IDR仍然无法工作,因为“3000000.00”
不是的有效值。@Andreas是的,我错过了,
部分。谢谢您,我编辑了答案