我有一个Object obj,我知道它实际上是一个long。在一些数学代码中,我需要它作为double。
直接把它投到双倍能安全吗?
double x = (double)obj;
或者我应该先把它扔长一点,然后再加两倍。
double x = (double)(long)obj;
我还找到了另一个(可读性较低)的替代方案:
double x = new Long((long)obj).doubleValue();
这两种做法的危险/含义是什么?
解决方案摘要
obj是Number而不是long。
Java6需要显式转换,例如:double x = ((Number)obj).doub
我想给ADO写个包装器。
DECIMAL是COM VARIANT可以是的一种类型,而VARIANT类型是VT_DECIMAL。
我试图将它放在c本地数据类型中,并保留变量值。似乎正确的类型是长双,但我得到“没有适当的转换错误”。
例如:
_variant_t v;
...
if(v.vt == VT_DECIMAL)
{
double d = (double)v; //this works but I'm afraid can be loss of data...
long double ld1 = (long double)v; //error: more then one
下面的代码是采取不同的时间与long和double,无法理解为什么会有不同的时间?
public static void main(String[] args) {
long j = 1000000000;
double k = 1000000000;
long t1 = System.currentTimeMillis();
for (int index = 0; index < j; index++) {
}
long t2 = System.currentTimeMillis();
在转换操作符中将类Int的成员数据转换为long double时,代码中出现了错误。但我不明白为什么会这样?
#include<iostream>
using namespace std;
class Int
{
private:
int number;
public:
Int() : number(0) // no argument constructor
{ }
Int( int i) : number(i)
我在做Java课程的练习。我有这段代码,它包含一个重载的方法:
class A {
// Overloaded method
public void f(int n, float x) {
System.out.println("f(int n, float x) n = " + n + " x = " + x);
}
private void f(long q, double y) {
System.out.println("f(long q, double y) q = "
string aux;
int maxy,auxx=0;
cin>>aux;
maxy= (int)sqrt(aux.size());
我得到了:
1> error C2668: 'sqrt' : ambiguous call to overloaded function
1> could be 'long double sqrt(long double)'
1> or 'float sqrt(float)'
1> or 'doubl
我曾经在Objective-C中使用过以下代码:
double currentTime = CFAbsoluteTimeGetCurrent();
// self.startTime is called before, like
// self.startTime = CFAbsoluteTimeGetCurrent();
double elapsedTime = currentTime - self.startTime;
// Convert the double to milliseconds
unsigned long long milliSecs = (unsigned
在下面的表达式中,发生了什么转换?
long long a;
long long b;
double c;
b=a*c;
假设long long类型为8字节。
如果a和b都为int,则在表达式b = a * c中,a将被转换为double,并与c进行乘法运算,结果将被转换为int并赋值给b。
我的假设正确吗?
我正在重新讨论一个问题(),就我而言,这个问题已经完全解决了。问题是检测特定的数值何时会溢出JavaScript的IEEE-754数字类型。前一个问题是使用C#,并且标记的答案非常有效。
现在,我正在执行完全相同的任务,但这次是用Java完成的,但它不起作用。AFAIK,Java使用IEEE-754作为double数据类型。因此,我应该能够来回抛它,以迫使精度的下降,但它的往返。对此感到困惑的是,我开始深入研究Java,现在我真的很困惑。
在C#和Java中,长期的最小值和最大值是相同的:
long MIN_VALUE = -9223372036854775808L;
long MAX_VAL
SSCCE:
public class Test {
public static void main(String[] args) {
Long a = new Long(1L);
new A(a);
}
static class A {
A(int i) {
System.out.println("int");
}
A(double d) {
System.out.println("double");
假设B除以A的类型如下,那么B除以A的最安全方法是什么?
unsigned long long A;
unsigned long int B;
我已经使用下面这行代码来完成此操作。它工作得很好,然而,有时它会因为分段故障而失败。
double C;
C= double(B)/double(A);
谢谢
我是一个试图学习C和C++的学生,我对说明符%d有一个问题。我不理解控制台中写的异常,它正在写
The format %d expects argument of type 'int', but argument 2 has type 'long long unsigned int' [-Wformat]
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
short int u=1;
int v=2;
long int w=3;
char x=
我注意到,在Visual中,将double添加到long long时会出现精度错误。例如:
long long a = 44981600439878676;
double b = 234567890;
a += b;
A的结果是44981600674446560,但应该是44981600674446566。x32和x64都会发生这种情况。
但是,以下内容返回正确的值:
long long a = 44981600439878676;
double b = 234567890;
a += (long long)b;
我在反汇编中注意到,在第一个没有显式强制转换的情况下,
0116A892 ca
Java中的包装类之间可以进行类型转换吗?
这里的代码是我尝试过的:
public class Test
{
public static void main(String[] args)
{
Double d = 100.04;
Long l = (long) d.doubleValue(); //explicit type casting required
int i = (int) l; //explicit type casting required
System.out.prin
在编写C++代码时,我突然意识到我的数字被错误地从double传递到了unsigned long long。
具体而言,我使用以下代码:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <limits>
using namespace std;
int main()
{
unsigned long long ull = numeric_limits<unsigned long long>::max();
double d = static_cast<double>
我有几个带有不同数量参数的排序函数,例如:
sort1(double tab[], long n ) sort2(double tab[], long n, long p)。
我需要写一个函数指针,我可以在其中调用这两个函数。我已经成功地使用了两个指针(一个用于带有2个参数的函数,另一个用于3个参数),但是被责备了。它需要是一个函数。这就是我之前想出来的。
void s1(void (*fun[])(double*, long ), double tab[], long n)
void s2(void (*fun[])(double*, long, long), do
我从this站点学习了如何在c++中实现二进制求幂。我使用了递归算法: long long binpow(long long a, long long b) {
if (b == 0)
return 1;
long long res = binpow(a, b / 2);
if (b % 2)
return res * res * a;
else
return res * res;
} 在我的情况下,我需要a为双精度值。我这样做就是为了这样做: double binpow(double a, long long
我试图创建一个程序,让用户从一个向量列表中选择一个起始位置,使用vec.push_back()从相同的列表中选择一个目的地,使用相同的列表减去1个数字。然后,代码应该从这些位置获取纬度和经度,并获得它们之间的距离和飞行时间。
输入数字很好,但输入数字后,终端状态如下:
terminate called after throwing an instance of 'std::invalid_argument'
what(): stod
bash: line 12: 19106 Aborte
这是我的代码:
#include<tgmath.h>
#include&
sqrtl函数在这里不起作用,而且long double的printf会为所有给定的数字打印f:
#include <conf.h>
#include <kernel.h>
#include <math.h>
#include <float.h>
long double sqrtn;
unsigned long int n;
void xmain() {
unsigned long int n;
printf("Enter unsigned long integer:\n");
sca
在Kotlin中,从版本1.5开始,对Double和Long类型的直接转换被标记为不推荐的,建议调用下面的toInt().toChar() --一个将Double/Long转换为Char的函数链。
是什么促使Kotlin开发人员放弃了对Double和Long类型的直接转换?
这种方法可以避免哪些问题?
fun main() {
val l = 100_000_000_000 // random big number
val d = 1.2543534645645362E15 // random big double
var chUsedDirectToChar = l
我想找出一些非常奇怪的Java行为。我有一个包含双倍的公式,但“保证”给出一个整数答案--特别是一个没有符号的32位整数(唉,Java做得不好)。不幸的是,我的回答有时是错误的。
最终,我发现了这个问题,但对我来说,这种行为仍然很奇怪:直接向int转换的int似乎被限制在MAX_INT上,用于有符号整数,而double强制转换为long,然后转换为int,给出了预期的答案(-1;无符号32位整数的最大整数,表示为带符号的32位整数)。
我写了一个小测试程序:
public static void main(String[] args) {
// This is the Max Int
class test{
public static void main(String... args){
double d=5.637;
System.out.println("double is:"+d);
long a=(long)d;
System.out.println("long is:"+a);
}
}
上面代码的输出是long is : 5,这与预期一致。
但是当我运行以下代码时:
class test{
public static void main(String... args){
double
以下代码:
#include <iostream>
#include <limits>
int main(int argc, char **argv) {
unsigned long n = 10ul;
unsigned long ul = std::numeric_limits<unsigned long>::max() - n;
double d = 1.;
ul += d;
std::cout << ul << std::endl;
}
人们可能会期望输出是std::numeric_limits<un