JavaでのLongからDoubleへの変換


91

Longデータ型をDoubleまたはに変換する方法はありますかdouble

たとえば15552451Ldoubleデータ型に変換する必要があります。

回答:


134

あなたは単に行うことができます:

double d = (double)15552451L;

または、次のようにLongオブジェクトからdoubleを取得できます。

Long l = new Long(15552451L);
double d = l.doubleValue();

6
そこで文字列を解析する必要はありません:Long.valueOf(15552451L).doubleValue()経由したい場合Long。これは内部で、からのキャストと同じdoubleですが、いくつかの自動/ボックス化解除を行うことに注意してください。
Joe Kearney

4
やった。これを行うために文字列を解析すると(現在は回答から編集されています)、パフォーマンスが何桁も低下します。ボクシングはより安価ですが、特に、(を使用してnew)取り除くことができないこのような場合には、回避する価値があります。
Joe Kearney

この例は、Long-> doubleから取得できることを示しているはずだと思います。初期化されたロングはそれが重要..思われない方法
AMS

1
答えの例は、今編集されているのでより合理的に見えます。文字列を介した値からdoubleへの変換はお勧めできません。私はそれがかなり物議を醸すことであると思っただろう。
Joe Kearney

1
明示的にキャストする必要はありません。それだけで動作します:double d = 15552451L;
cutemachine '13年

20

簡単なキャスト?

double d = (double)15552451L;

そして、もしそれが文字通り正義なら15552451d
ジョン・フリードマン

2
キャストは必要ないと思いますが、 "double d = 1234L;"のようなlong値でdoubleを作成できます。
crusam

おそらくそうではありませんが、問題は、キャスティングのような概念の導入を保証するのに十分基本的なものです。
ジムブリソム

9

すでに述べたように、単にlongをdoubleにキャストできます。ただし、Java ではlongからdoubleへの変換が狭まるため、longからdoubleへの変換には注意してください。

double型からlong型への変換には、64ビット浮動小数点値から64ビット整数表現への重要な変換が必要です。実際のランタイム値によっては、情報が失われる可能性があります。

たとえば、次のプログラムは0ではなく1を出力します

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);

3

バイナリ変換をお探しですか?

double result = Double.longBitsToDouble(15552451L);

これによりdoublelongリテラルと同じビットパターンが得られます。

ここでは、2進数または16進数のリテラルが役に立ちます。下記は用例です。

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);

Double.longBitsToDouble(long)を参照)

あなたはまたlong

long bits = Double.doubleToRawLongBits(Double.NaN);

Double.doubleToRawLongBits(double)を参照)


これは別のことを行います。jdoc(docs.oracle.com/javase/6/docs/api/java/lang/…)を参照してください
Jiri Kremser '28

はい。しかし、彼は自分がどのように変換longしたいのdouble(キャストはJavaを使用するときに最初に学ぶことの1つだと思います)も指定していませんでした。たぶん、彼doublelong値と同じビットパターンでaを取得したいと考えています。よくわかりません。だから私はちょうど答えを出した。
pvorb 2013年

追加情報を追加したので、答えはより価値があります。
pvorb 2013年

3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

このように、文字列値をDoubleまたはFloatまたはIntに変換するのが簡単であるため、Long型をDoubleまたはFloatまたはIntに問題なく変換できます。


2
投稿するコードに解答として説明を追加することをお勧めします。これにより、訪問者がこれが良い解答である理由を理解しやすくなります。
abarisone 16

1

長い日付タイプとはどういう意味ですか?

longをdoubleにキャストできます。

double d = (double) 15552451L;

長い日付は「火曜日、9月19日24893243092333」のようなものになると思います。
Teemu Leisti

0

あなたはこのようなことを試すことができます:

long x = somevalue;

double y = Double.longBitsToDouble(x);

0

あなたにいいと思います。

BigDecimal.valueOf([LONG_VALUE]).doubleValue()

このコードはどうですか?:D

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.