java - 检查计算结果是整数还是小数

标签 java double long-integer rounding-error

我有这个公式

Math.sqrt( 2 * Math.sqrt(m) + 1 / 4 ) - 1 / 2

在函数中,其中 m 是 long 类型的输入。
我需要检查这个表达式的结果是整数还是小数,如果是整数则返回结果,如果是小数则返回-1。
因此,我决定将结果放入 double 中:

double n = Math.sqrt( 2 * Math.sqrt(m) + (double)1 / 4 ) - (double)1 / 2;

我尝试了一些在这里找到的解决方案,例如:

  • 使用模运算符: if ( n % 1 == 0 )

  • 或者使用Math.ceil和floor函数

但是当表达式结果的小数部分非常接近 1(例如 .98999)时,它们都不起作用...
例如,当 m = 2084574945554272657 时,结果应为 53735.96813...
但它是四舍五入的,实际上 n 中存储的是 53736.0,而函数的答案是 n 是整数,这是不正确的。
有没有办法可以正确检查结果?

最佳答案

试试这个:

double toCheck = 277.76;
if((toCheck-(int)toCheck)!=0)
    System.out.println("decimal value");
else
    System.out.println("integer value);

关于java - 检查计算结果是整数还是小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46956509/

相关文章:

c - 在只处理整数的程序中输入 float

scala - 如何找到不会给出无限结果的最小 `Double` 除数?

java-stream-List of Long to list in one line

java - 获取空结果集以进行简单查询

java - 错误 : Execution failed for task ':app:shrinkReleaseMultiDexComponents'

java - 检查 double 值是否大于零的简单方法

c++ - 为什么有人使用 int 数据类型?

java - 如何将 Cobertura 与 Cucumber jvm 和 Maven 一起使用?

java - Spring Riak 集成

c++ - 为什么这个函数不会超过值 2^31?