没有强制转换,将double转换为long的最佳方法是什么?
例如:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
Run Code Online (Sandbox Code Playgroud) 是否有可能做到这一点?
double variable;
variable = 5;
/* the below should return true, since 5 is an int.
if variable were to equal 5.7, then it would return false. */
if(variable == int) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我知道代码可能不会去这样的事情,但怎么也去了?
我的问题是,是否保证所有整数值都具有完美的双重表示.
请考虑以下打印"相同"的代码示例:
// Example program
#include <iostream>
#include <string>
int main()
{
int a = 3;
int b = 4;
double d_a(a);
double d_b(b);
double int_sum = a + b;
double d_sum = d_a + d_b;
if (double(int_sum) == d_sum)
{
std::cout << "Same" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
对于任何架构,任何编译器,任何值a和b?保证这是真的吗?i转换为的任何整数是否double总是表示为i.0000000000000和不表示为,例如,i.000000000001?
我尝试了其他一些数字并且它总是如此,但无法找到关于这是巧合还是设计的任何信息.
注意:这与这个问题(除了语言)不同,因为我添加了两个整数.
特别是在Java中,如何确定a double是否为整数?为了澄清,我想知道如何确定double实际上不包含任何分数或小数.
我主要关注的是浮点数的性质.我想到的方法(以及我通过Google找到的方法)基本遵循以下格式:
double d = 1.0;
if((int)d == d) {
//do stuff
}
else {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我当然不是浮点数和它们的行为方面的专家,但我的印象是因为double商店只有数字的近似值,if()条件只会进入某些时间(甚至大部分时间) ).但我正在寻找一种方法,无论double价值如何存储在系统中,都能保证100%的时间都能正常工作.
这可能吗?如果是这样,怎么样和为什么?