【问题标题】:ArgumentType: 'Big Decimal' does not match the type of the format specified '%d'参数类型:“Bigdecimal”与格式说明符“%d”的类型不匹配
【发布时间】:2022-07-16 13:37:49
【问题描述】:
String stockStr = " ";

for (StockRecordDTO stockNumber : stockID)
{
    stockStr+= 

    String.format("the stock %s for Date %s with Quantity %d ", 
            stockNumber.getStock(),
            stockNumber.getBusinessDate(), 
            stockNumber.getQuantity()
        );
}

我正在尝试通过将值提取到字符串然后以这种方式打印来打印出值的 ArrayList。我从 DTO 类中获取值,并且我使用 string.format 方法遇到了错误,我曾经说过

ArgumentType: 'Big Decimal' 与指定格式的类型不匹配 '%d'

数量在 DTO 类中定义为 BIG Decimal。

那么我该如何解决呢?

感谢您提前提供帮助

【问题讨论】:

  • 欢迎来到stackoverflow!
  • 你可以用%s代替%d

标签: java string object bigdecimal string.format


【解决方案1】:

您可以尝试将BigDeciaml 转换为double

stockNumber.getQuantity().doubleValue()

注意这一点,在你的类中使用BigDeciamal 可能是有原因的,将其转换为不同的类型可能会导致精度损失。

【讨论】:

  • 转换为 double 将失败并出现相同的错误,除非您还将格式说明符更改为 %f 。无需转换为另一种类型。使用%s 就足够了。
  • 这会影响输出的值/影响值的精度吗?
  • @ShiBui 它会影响值的精度。 BigDecimal 可以以(几乎)任意大的精度表示(几乎)任意大的数字。 BigDecimal 的限制远大于double 的限制。根据您的数据,您使用的值可能适合double - 但问题是代码首先使用BigDecimal
猜你喜欢
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
相关资源
最近更新 更多