当前位置:首页 » 编程语言 » doubletolongjava

doubletolongjava

发布时间: 2022-11-20 10:22:43

java 的long转换double问题

long是高于double精度的一个基础变量类型,你在这里的强行转换会产生精度缺失的问题。

这个是我运行你的代码的结果,可以看出精度的缺失吧?

long是一个长整形变量,而double是双精度的浮点数(其实就是小数)

然后再这里b/1000就是等于12,因为b是长整形的,他的计算结果也会事长整形的

所以需要在计算前先将b强制装换为double型的,才可以保证精度不缺失

❷ java中将一个double类型的数强制转换为long 型是四舍五入吗

Java 中 long 是一个整数基本类型, 长度为64bits, 即8字节.而double存在小数;如果带小数点的double转long型必定会造成数据变化!那么,是怎么变化的呢?

由此可见,java double转long型是取整运算;

❸ 在JAVA中把double类型转换成long类型,丢失数据位是什么,为什么

double是浮点型,long是整数型,以上语句转换时小数部分没有了,这就是丢失。javadouble转long型是取整运算,用Double封装下基本类型double,再调用longValue方法。Double(doublevalue)

longlongValue(),将此Double值作为long类型返回(通过强制转换为long类型),详细步骤:

1、首先在visualstudio中用c#语言进行类型转换,新建项目命名"longdouble",项目结构图如下。

❹ Java中的Long和Double类型

Java中的原子操作包括:
1)除long和double之外的基本类型的赋值操作

2)所有引用reference的赋值操作

3)java.concurrent.Atomic.* 包中所有类的一切操作。

但是java对long和double的赋值操作是非原子操作!!long和double占用的字节数都是8,也就是64bits。在32位操作系统上对64位的数据的读写要分两步完成,每一步取32位数据。这样对double和long的赋值操作就会有问题:如果有两个线程同时写一个变量内存,一个进程写低32位,而另一个写高32位,这样将导致获取的64位数据是失效的数据。因此需要使用volatile关键字来防止此类现象。volatile本身不保证获取和设置操作的原子性,仅仅保持修改的可见性。但是java的内存模型保证声明为volatile的long和double变量的get和set操作是原子的。(from
http://www.iteye.com/topic/213794)

举个例子来说:(example is from
http://stackoverflow.com/questions/17481153/long-and-double-assignments-are-not-atomic-how-does-it-matter)

public class UnatomicLong implements Runnable {

private static long test = 0;

private final long val;

public UnatomicLong(long val) {

this.val = val;

}

@Override

public void run() {

while (!Thread.interrupted()) {

test = val;
//两个线程都试图将自己的私有变量val赋值给类私有静态变量test

}

}

public static void main(String[] args) {

Thread t1 = new Thread(new
UnatomicLong(-1));

Thread t2 = new Thread(new
UnatomicLong(0));

System.out.println(Long.toBinaryString(-1));

System.out.println(pad(Long.toBinaryString(0),
64));

t1.start();

t2.start();

long val;

while ((val = test) == -1
|| val == 0) {

//如果静态成员test的值是-1或0,说明两个线程操作没有交叉

}

System.out.println(pad(Long.toBinaryString(val), 64));

System.out.println(val);

t1.interrupt();

t2.interrupt();

}

// prepend 0s to the string to make it the target
length

private static String pad(String s, int targetLength) {

int n = targetLength - s.length();

for (int x = 0; x < n; x++) {

s = "0" + s;

}

return s;

}

}

❺ java中,如何将double类型数据转换为16进制字符串或者是16进制字节数组

1、转化为long类型

先Double.doubleToLongBits/Double.doubleToRawLongBits,得到long类型,

例子:

longl=0x0102030405060708L;

2、转化为16进制字符串或数组

byte[]b=newbyte[8];
b[0]=(byte)(l&0x000000000000FFL);
b[1]=(byte)((l&0x0000000000FF00L)>>8);
b[2]=(byte)((l&0x0000000000FF0000L)>>16);
b[3]=(byte)((l&0x00000000FF000000L)>>24);
b[4]=(byte)((l&0x000000FF00000000L)>>32);
b[5]=(byte)((l&0x0000FF0000000000L)>>40);
b[6]=(byte)((l&0x00FF000000000000L)>>48);
b[7]=(byte)((l&0xFF00000000000000L)>>56);



❻ java中将一个double类型的数强制转换为long 型是四舍五入吗

不是的,
(double)
b/1000;
这一步是把b先转化为Double型
然后进行计算
因为计算的类型中有double型
所以1000自动转化为double型
结果就是double型
12.345
b/1000;
这一步是long型/long型
得到的结果也是long型
就是12
然后转化为double型
就是12.0

❼ java中,有没有把double转成时间类型的方法

没有
你把double的转成long就可以了
不过强转的时候会丢失精度

❽ 在Java语言中 long和double的范围

long的取值范围是2的63次方-1到负的2的63次方。
double的取值范围比较复杂建议去看标准化协议,即使是双精度的double在精确计算上误差也比较大建议使用bigdecimal

❾ 最近看java基础,发现数值不一样的long和double类型的数据比较的结果居然会相同,请高手答疑!

自动类型提升,也就是说两个基础数据类型进行值对比的时候,类型不一样
低的会自动提升到高的数据类型,然后进行对比!
你可以做个实验,
int 10;
byte 10;
long 10;
double 10;
进行比对,你会发现全都是true!

❿ java大神快快来,Double.doubleToLongBits()这是干什么的,API看不懂

doubleToLongBits方法根据 IEEE 754 浮点双精度格式 ("double format") 位布局,返回指定浮点值的表示形式。

语法 public static long doubleToLongBits(double value)

返回值:表示浮点数的位。

参数:value为双精度(double)浮点数。

第 63 位(掩码 0x8000000000000000L 选定的位)表示浮点数的符号,第62~52位(掩码
0x7ff0000000000000L 选定的位)表示指数,第51~0位(掩码 0x000fffffffffffffL
选定的位)表示浮点数的有效数字(有时也称为尾数)。如果参数是正无穷大,则结果为
0x7ff0000000000000L;如果参数是负无穷大,则结果为 0xfff0000000000000L;如果参数是 NaN,则结果为
0x7ff8000000000000L。

在所有情况下,结果都是一个 long 整数,将其赋予 longBitsToDouble(long) 方法将生成一个与 doubleToLongBits 的参数相同的浮点值(所有 NaN 值被压缩成一个“规范”NaN 值时除外)。

示例 本示例通过doubleToLongBits方法将double数值转换为IEEE 754 浮点双精度格式 ("double format") 位布局的形式。

double d = 123.456;

long l = Double.doubleToLongBits(d);

System.out.println(i);

热点内容
我的世界电脑版进pe服务器 发布:2025-01-15 21:33:57 浏览:293
网页游戏吃什么配置 发布:2025-01-15 21:27:58 浏览:64
安卓怎么转移数据华为 发布:2025-01-15 21:03:02 浏览:140
软件打印反馈单脚本错误 发布:2025-01-15 21:01:24 浏览:177
如何进cs里的练枪服务器 发布:2025-01-15 21:00:07 浏览:979
苹果手机存储芯片 发布:2025-01-15 20:52:02 浏览:163
盲人读屏软件安卓哪个好 发布:2025-01-15 20:47:13 浏览:729
炸图脚本 发布:2025-01-15 19:56:07 浏览:429
八字源码 发布:2025-01-15 19:54:47 浏览:372
服务器可以变电脑使用吗 发布:2025-01-15 19:40:29 浏览:202