请原谅显而易见的“我应该已经知道这个”这个问题的元素,但我没有看到一个方法,我将通过这个评估的分区,以使结果回归真实。< / p>
我正在寻找一个将结果作为特定精度的浮点数返回的函数,以便以下方法可以正常工作......
float a = 0.66;
if( magicPrecisionFunction(2.0f/3.0f , 2) == a){ //the 2 specifies the level of precision
//something
}
我意识到我可以在2分钟内自己编写,但我希望找到一种Java本地方式来“正确”地执行此操作。
答案 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) {
...
}