當前位置:首頁 » 編程語言 » 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);

熱點內容
android文件圖片 發布:2025-01-15 17:39:44 瀏覽:205
linux的路徑怎麼寫 發布:2025-01-15 17:18:49 瀏覽:185
php解壓程序 發布:2025-01-15 17:06:22 瀏覽:142
刷助力腳本 發布:2025-01-15 17:02:31 瀏覽:520
c盤里的用戶文件夾可以刪除 發布:2025-01-15 16:56:45 瀏覽:951
虛幻4編譯到哪裡 發布:2025-01-15 16:50:19 瀏覽:756
透明度漸變android 發布:2025-01-15 16:45:08 瀏覽:835
dos連接oracle資料庫 發布:2025-01-15 16:41:39 瀏覽:906
網路配置比較低怎麼做 發布:2025-01-15 16:35:38 瀏覽:362
android彈出鍵盤監聽 發布:2025-01-15 16:35:11 瀏覽:208