我有以下代码,但是我无法理解为什么两个bigdecimal不被视为相等
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
BigDecimal b = new BigDecimal(13.90);
BigDecimal b2 = new BigDecimal("13.9");
System.out.println(b.compareTo(b2));
}
}
Run Code Online (Sandbox Code Playgroud)
该代码输出1作为输出.那为什么会这样?不应该是0吗?
此外,如果我写13.9而不是"13.9",它给出0作为输出
因为你假设如果你使用13.9它将完全是13.9.尝试打印的价值观b
和b2
,你会看到,13.9
实际上是13.9000000000000003552713678800500929355621337890625
和分析的字符串值是 13.9.所以b
(稍微)高于b2
.
public static void main(String...strings) {
BigDecimal b = new BigDecimal(13.9);
BigDecimal b2 = new BigDecimal("13.9");
System.out.printf("%s %s %d%n", b, b2, b.compareTo(b2));
}
Run Code Online (Sandbox Code Playgroud)
作为输出:
13.9000000000000003552713678800500929355621337890625 13.9 1
Run Code Online (Sandbox Code Playgroud)
关于浮点数学的主题,您可能想要阅读为什么浮点数不准确?和stackoverflow上可用的其他链接.