如何格式化具有固定小数位数的JSR-385数量



我正在尝试将硬编码格式转换为Java Units API实现。

现有代码输出(在本例中,温度值以度为单位(,带有两位小数。例如,38.70°C。虽然我希望允许用户指定自己的格式代码(这是更改的最终目标(,但我认为保留遗留行为会很有用,这样人们就有机会迁移。

现有代码看起来像:

return String.format("%.2fu00B0C", this.temperature);

我尝试使用的代码看起来像:

DecimalFormat numberFormat = (DecimalFormat) DecimalFormat.getInstance();
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(2);
NumberDelimiterQuantityFormat formatter =
NumberDelimiterQuantityFormat.builder()
.setNumberFormat(numberFormat)
.setDelimiter("")
.setUnitFormat(SimpleUnitFormat.getInstance())
.build();
return formatter.format(temperature);

它确实格式化,但不具有指定的精度。我期望38.70°C,但得到的却是38.70000076293945℃

如果我只是做

numberFormat.format(temperature.getValue().floatValue());

那么它的格式是正确的("38.70"(。所以我认为DecimalFormat基本上是可以的。

我考虑过手动构建我的格式。然而,这并不适用于我想要做的事情——在NumberDelimiterQuantityFormat(或适用的接口(中传递。

有人能提出一种合适的方法来格式化具有固定小数精度的Quantity<>吗?

首先,我对Java Unit API和这个实现完全不熟悉,但这似乎是一个有趣的问题,所以我研究了它

我看过NumberDelimiterQuantityFormat的实现,在format方法的实现中,它根据分数修改了NumberFormatmaxiumFractionDigits

if (quantity != null && quantity.getValue() != null) {
fract = getFractionDigitsCount(quantity.getValue().doubleValue());
}
if (fract > 1) {
numberFormat.setMaximumFractionDigits(fract + 1);
}

这对我来说没有什么意义,原因有两个:

  1. 它首先否定了NumberFormat的全部原因,尤其是在浮点数字的情况下,几乎不可能避免多余的小数。

  2. 它以一种不期望的方法修改NumberDelimiterQuantityFormat的内部状态。

我应该先检查一下,但实际上有一个问题,那就是"被分析";几个月了。也许进去问问会有意义。

相关内容

  • 没有找到相关文章