2012-05-01 1 views
0

二重の値があります。整数値に変換したいです。ただし、double値は問題を引き起こすほど大きくなります。倍精度浮動小数点値のプログラミングで問題が発生しました。

double val1 = 74.1234567890 
int val2; 

私はval2の値は小数点なしで741234567890に等しくなるようにしたい:ここでは一例です。誰にもこれを達成するための提案はありますか?

+4

741234567890は 'int'に収まらないので、' long'が必要です。しかし、コンバージョンの基準は何ですか? –

+2

java、C++またはC?答えは言語によって異なる場合があります。 – juanchopanza

+1

@juanchopanzaおそらく、言語よりも関連性が高いのは、浮動小数点形式です。彼の 'val1'には' 74.1234567890'という文字は含まれていません。この特定の値は、通常の浮動小数点形式では正確に表現できません。 –

答えて

2

74.1234560000から何が欲しいですか?常に10桁の数字の場合はval * 1e10となり、適切に大きな整数型に変換するとジョブが実行されます。それ以外の場合は、必要なものをより明確に定義する必要があります。 doubleの初期化に使用された文字列に基づいている場合、それは実行できません。多くの異なる文字列は、実際に解釈された場合に異なる値を表す文字列を含め、まったく同じ内部値になります。他の極端な例では、負の10乗を乗じた値が浮動小数点の値になるような最小の整数値が必要な場合...ほとんどの浮動小数点値には小数点以下の桁数が必要となり、結果ほとんどすべての本質的な一体型には適合しません。

-1

doubleをintの代わりにStringに変換します。

+0

しかし、彼はintを欲しいですか?それは適合しません。 – RvdK

+0

stringをintに変換する際に問題がありますか?最大限の制限に注意してください。 – user1335794

0

Javaでできることの1つは、文字列に解析してからドットを取り除き、それをintに解析することです。

double val1 = 74.1234567890; 
String str = String.parse(val1); 
str = str.replace(".", ""); 
int val2 = Integer.parse(str); 

だけダブル2つのワード(8バイト)を保持しているので、あなたのような変換は、オーバーフローが発生することを覚えて、intは唯一の間の値を保持することができるすべての

0

最初のみ2(4バイト)がINT - 2,147,483,648および2,147,483,647。 したがって、741234567890は適合しません。それは(@Danielフィッシャーを参照してください)

あなたは、例示のためだけで行うことができますのためにあなたは長いが必要になります:「」

//silly conversion 
double val1 = 74.1234567890; 
long val2 = Math.round(val1 * 10000000000); 

あなたが他の値をサポートしたいとの並べ替えをしたい場合リムーバー、あなたはこれをStringsで見てください。