繁体   English   中英

如何比较浮点数

[英]How do I compare floating point numbers

请原谅问题中明显的“我可能已经知道这一点”元素,但我没有看到一种方法可以对评估结果进行除法运算,以使结果恢复为真。

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

float a = 0.66;

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

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

如果您想获得精度,我就不会使用float因为double容易编写,并且可以为您提供5000亿倍的精度。

类似于@rofl的示例

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

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

BTW将双精度型转换为BigDecimal的正确方法是使用valueOf

BigDecimal bd = BigDecimal.valueOf(0.1);
System.out.println(bd); // prints 0.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

多么...

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

编辑:啊...错过了重点...不是圆的,而是truncatte。 在这种情况下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM