如何比较浮点数

时间:2013-05-13 22:29:23

标签: java floating-point

请原谅显而易见的“我应该已经知道这个”这个问题的元素,但我没有看到一个方法,我将通过这个评估的分区,以使结果回归真实。< / p>

我正在寻找一个将结果作为特定精度的浮点数返回的函数,以便以下方法可以正常工作......

float a = 0.66;

if( magicPrecisionFunction(2.0f/3.0f , 2) == a){ //the 2 specifies the level of precision
   //something
}

我意识到我可以在2分钟内自己编写,但我希望找到一种Java本地方式来“正确”地执行此操作。

3 个答案:

答案 0 :(得分:2)

如果你想要精确度我不会使用float因为double更容易编写,并且给你的精确度提高了一万亿倍。

与@ rofl的例子类似

int n = 2, d = 3;
if ((long)(100.0 * n / d) == 66) {
  ...
}

这不仅比使用BigDecimal快100倍,而且编写的代码更短。

BTW将double转换为BigDecimal的正确方法是使用valueOf

BigDecimal bd = BigDecimal.valueOf(0.1);
System.out.println(bd); // prints 0.1

答案 1 :(得分:1)

您可以使用BigDecimal,它可以完全满足您的需求, 您可以创建所需的数字并使用MathContext

设置精度
    BigDecimal b1 = new BigDecimal("2.0");
    BigDecimal b2 = new BigDecimal("3.0");
    BigDecimal ans = b1.divide(b2, new MathContext(2)); // 2 is precision

答案 2 :(得分:1)

怎么样......

if (Math.round(100.0f * 2.0f/3.0f) == 66) {
  ..
}
编辑:啊......错过了这一点......不是圆的,而是截断的。在这种情况下:

if ((int)(100.0f * 2.0f / 3.0f) == 66) {
  ...
}