【问题标题】:ConvertString to Big Decimal in JAVA [duplicate]在JAVA中将字符串转换为Bigdecimal [重复]
【发布时间】:2017-07-05 10:17:57
【问题描述】:

我正在尝试将字符串存储到数据类型为 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)

【问题讨论】:

  • 约翰,你真的想把 Big Decimal 转换为 String 吗?正如我在您的代码中看到的那样,您正在尝试将 String 转换为 Big Decimal
  • @Andreas: NumberFormatException != NullPointerException.
  • 那么您为什么希望BigDecimal(String) 能够解析它?您是否期望它只是删除领先的“IDR”部分?文档是否表明它会这样做?
  • @John BigDecimal 用于 数字,例如3000000.00 是一个有效数字。 3,000,000.00 不是 BigDecimal 的有效数字。 Indonesian Rupiah IDR 货币前缀也不是 数字 的有效部分。所以不,BigDecimal 不能用货币存储 amount 值。
  • @John,您是否尝试过 here 提供的解决方案,但这无助于您存储 IDR

标签: java string bigdecimal numberformatexception


【解决方案1】:

这里的问题是您的字符串包含字母字符,因此无法将其转换为BigDecimal,这就是您得到NumberFormatException 的原因。

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

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

【讨论】:

  • 仍然无法工作,因为" 3,000,000.00" 不是new BigDecimal(String) 的有效值。
  • @Andreas 是的,我错过了, 部分。谢谢我编辑了答案
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2022-01-23
  • 2013-01-20
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多