0

请原谅问题中明显的“我可能应该已经知道这个”元素,但我没有看到一种方法可以让我通过这个评估的除法方面来让结果回归真实。

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

float a = 0.66;

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

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

4

3 回答 3

2

If you want precision I wouldn't use float as double is simpler to write and gives you half a trillion times the accuracy.

Similar to @rofl's example

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

Not only is this about 100x faster than using BigDecimal, the code is shorter to write.

BTW The proper way to to convert a double to a BigDecimal is to use valueOf

BigDecimal bd = BigDecimal.valueOf(0.1);
System.out.println(bd); // prints 0.1
于 2013-05-14T04:42:24.690 回答
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
于 2013-05-13T22:40:28.103 回答
1

怎么靠...

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

编辑:啊……没抓住重点……不是圆的,而是截断的。在这种情况下:

if ((int)(100.0f * 2.0f / 3.0f) == 66) {
  ...
}
于 2013-05-13T22:41:22.687 回答