gpt4 book ai didi

java - DecimalFormat 上限不正确

转载 作者:行者123 更新时间:2023-11-29 08:59:22 25 4
gpt4 key购买 nike

我们目前正在进行一些测试,其中涉及具有两位小数的上限数字。为了实现这一点,我们使用 Java 的 DecimalFormat。 .

但是,测试得到了奇怪的结果,尤其是当我们希望限制一个'0.00xxx' 数字时。

以下是测试正在使用的 DecimalFormatter 的实例:

DecimalFormat decimalFormatter = new DecimalFormat("#########0.00");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);

这个测试按预期工作,也就是说,它被正确地限制了:

//The below asserts as expected
@Test
public void testDecimalFormatterRoundingDownOneDecimalPlace3()
{
String formatted = decimalFormatter.format(234.6000000000001);
Assert.assertEquals("Unexpected formatted number", "234.61", formatted);
}

但是,这不会:

//junit.framework.ComparisonFailure: Unexpected formatted number 
//Expected :0.01
//Actual :0.00

@Test
public void testSmallNumber()
{
double amount = 0.0000001;

String formatted = decimalFormatter.format(amount);
Assert.assertEquals("Unexpected formatted number", "0.01", formatted);
}

能否请您解释一下为什么我们会出现这种行为。谢谢

编辑:评论要求的另一项测试。还是不行。

//junit.framework.ComparisonFailure: null
//Expected :0.01
//Actual :0.00

@Test
public void testStackOverflow() throws Exception
{
double amount = 0.0000006;
String formatted = decimalFormatter.format(amount);
Assert.assertEquals("Unexpected formatted number", "0.01", formatted);
}

我注意到要使它起作用,大于 0 的数字必须在模式范围内。这是错误还是我遗漏了什么?

最佳答案

看起来像一个错误。这段代码

    BigDecimal bd = new BigDecimal("0.0000001");
bd = bd.setScale(2, RoundingMode.CEILING);
System.out.println(bd);

产生正确的结果

0.01

关于java - DecimalFormat 上限不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18461651/

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