gpt4 book ai didi

java - DecimalFormat 小数位数

转载 作者:行者123 更新时间:2023-12-01 05:43:04 27 4
gpt4 key购买 nike

目前,我在 JTable 中显示了具有 3 位小数的 BigDecimal 值。当我得到的值为 2.500 或 1.000 时,我想要 2.5 和 1.0。这就是我尝试这个的原因:

                    BigDecimal value;
BigDecimal value3 = new BigDecimal((String)model.getValueAt(e.getLastRow(), 1)).setScale(3, BigDecimal.ROUND_HALF_UP);
BigDecimal value2 = new BigDecimal((String)model.getValueAt(e.getLastRow(), 1)).setScale(2, BigDecimal.ROUND_HALF_UP);
if(valor3.equals(value2))
{
BigDecimal value1 = new BigDecimal((String)model.getValueAt(e.getLastRow(), 1)).setScale(1, BigDecimal.ROUND_HALF_UP);
if(value3.equals(value1))
value = valuer1;
else
value = value2;
}
else
value = value3;

但是这不起作用。看起来 '2.500'.equals('2.5') 是 false。

我还尝试在其渲染器中为 JTable 提供格式:

 class paramRenderer extends DefaultTableCellRenderer
{
private final DecimalFormat formatter = new DecimalFormat( "#.000" );

public void setValue() {
formatter.setMinimumFractionDigits(1);
formatter.setMaximumFractionDigits(3);
}
}

但这根本没有区别。

还有其他想法吗?

编辑:最后我在互联网上找到了一个解决方案:

BigDecimal trim(BigDecimal n)
{
try
{
while (true)
{
n = n.setScale(n.scale()-1);
}
}
catch (ArithmeticException e)
{
// Not "real" error: No more trailing zeroes -> Just exit // setScale() tries to eliminate a non-zero digit -> Out of the loop // Remember exceptions are not recommended for exiting loops, but this seems to be the best way...
}

return n;
}

而且效果很好!无论如何,非常感谢您的帮助:)

最佳答案

  • 第一个比较是错误的,因为您有不同的比例 - value2 有 2,value3 有 3。如果您使它们相同,则有效
  • 如果您只想显示内容,则不需要 BigDecimal。小数格式应该可以使用,但您还应该将最大小数位数设置为 1

关于java - DecimalFormat 小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6649216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com