2009-08-18 4 views
0

例:7.2828を持っていれば、2828を整数として取得したいだけです。ダブルの浮動部分を整数に変換することはできますか?(文字列変換は使用しません)

+6

私はこれが重複していることを知っています(私はある時点で回答しました)が、7.28と7.0028の両方が28の答えで終わることに気づきましたか?元の浮遊部分が何であるか分かりません。 –

+2

これらの2つの数値をどのように処理するかを明確にすることができます:7.02828と7.000002828 –

+0

0.000000000125657542619998のようなものをどのように処理したいですか? – MartW

答えて

3

10進

は小数点にあなたの番号を変換して、これを行う...あなたの友達です。

 decimal d = (decimal)7.2828; 
     int val = decimal.GetBits(d - decimal.Truncate(d))[0]; 

小数点以下のことは、valをintとして格納し、小数点位置を格納することです。 C++で

3

dが元の値の場合は、次のようにします。

((int)(d * 10000)) % 10000 
+0

は特にこの番号には該当しません。あなたが点を扱っている数字の数を知らないならば。 10000が機能しません。 – jmayor

+0

C++では、doubleをintにキャストするためにstatic_castを使用する必要があります。最終的なコードはstatic_cast (d * 10000.0)%10000のようになります。 Cキャストは互換性のためだけです。理由なしで使用しないでください。 –

+0

JIa3ep、質問はc#でタグ付けされています。 (実際には、何らかの理由で私はもともとJavaのための質問でした:-))。 – avakar

0

は、double modf(double, double *)を使用します。

double value; 
double fractional_part; 
double integer_part= modf(value, &fractional_part); 
int fractional_part_as_integer= fractional_part * 10000; // insert appropriate scale here. 
0

私はあなたができるとは思いません。ほとんどのCPUは、7.2828を二重として表すことはできません(IBMメインフレームは例外です)。理由は、2のべき乗の合計として2倍を表すからです。「7」の部分は簡単です:1 + 2 + 4。断片的ビットはより難しい:0.25 + 0.0.03125 + 0,0009765625 ..... - 無限のシーケンス。実際的な理由から、このシーケンスは切り捨てられます。結果として生じるダブルは7.2828に近いでしょう。おそらく7.282800000000001245。これはおそらく(32ビット)整数に収まらないでしょう。

関連する問題