我有一些这样的代码:
class Foo {
public double x;
}
void test() {
Foo foo = new Foo();
// Is this a valid way to test for zero? 'x' hasn't been set to anything yet.
if (foo.x == 0) {
}
foo.x = 0.0;
// Will the same test be valid?
if (foo.x == 0) {
}
}
我基本上希望将来避免除以零的异常。
谢谢
如果未显式初始化,则类范围内的数字基元将初始化为零。
必须显式初始化局部范围内的数字基元(方法中的变量)。
如果您只担心被零例外除,那么检查双精度数是否不 完全 为零非常有用。
if(value != 0)
//divide by value is safe when value is not exactly zero.
否则, 当检查浮点值是否为double
或时float
为0时,将使用错误阈值来检测该值是否接近0,但不 完全为 0。
public boolean isZero(double value, double threshold){
return value >= -threshold && value <= threshold;
}
问题内容: 是否有可能做到这一点? 我知道代码可能不会去这样的事情,但怎么也去了? 问题答案: 这将检查双精度值的四舍五入值是否与双精度值相同。 你的变量可能具有或值,并且始终具有int值,因此,如果你的变量等于,则它必须具有int值。 如果变量的值是无穷大或负无穷大,那么这也不起作用,因此向条件添加“只要变量不是无穷大”。
问题内容: 我有一个必须在用户界面上显示的双精度值。现在的条件是double的十进制值= 0,例如。-14.0在这种情况下,我必须仅在UI上显示14。另外,此处字符的最大限制为5。 例如:-12.34整数值不能大于2位,所以double的十进制值也不能大于2位。 最好的方法是什么? 问题答案: 你可以做 检查是否整体。
问题内容: 目前我有这种方法: 但是此方法失败的原因可能是因为我在2的基础上进行了10的数学计算。 那么如何才能正确完成此检查? 我想到了获取double值的字符串表示形式,然后使用正则表达式进行检查-但这感觉很奇怪。 编辑: 感谢所有的答案。在某些情况下,我确实获得了双倍奖励,对于这些情况,我实现了以下目标: 我将其更改为截断。似乎计算完成会大大增加不准确性。至少在失败的测试用例中。 正如你们中
问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。
我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?
类有一些有用的方法来保证无损转换: <代码>字节值精确() 但是,方法floatValueExact()和doubleValueExact()不存在。 我阅读了方法和的OpenJDK源代码。两者似乎都分别回退到和,它们可能返回正无穷大或负无穷大。例如,解析10,000个9s的字符串将返回正无穷大。据我所知,没有无穷大的内部概念。此外,将100个9s的字符串解析为给出了,这不是无穷大,而是失去了精度