2012-01-06 9 views
14

私はCのデータ型について読んでいました。私はlong doubleの範囲がjavaのdoubleの範囲を超えていることを発見しました。非常に巨大な数については、私はCで長いdoubleを使用することができます。私はjavaに同じ番号を格納したい場合、私たちは何をしなければなりませんか?どのデータ型を使用できますか?ロング・ダブルをJavaに置き換えていますか?

Javaで二重には、それは(正または負)+ 308Dを1.79769313486231570eする 4.94065645841246544e-324Dからの範囲をカバーする8バイト(64ビット)IEEE 754を要します。

longdouble in c takes 10 bytes (80 bits) 

誰も私を伝えることができるJavaでlongdoubleのいずれかの交換

+3

BigDecimalを試してください。 –

+0

Bigdecimalは算術演算子を使って直接算術演算を行うことはできません。 –

+0

'long double'はC言語でコンパイラ固有のものですが、ほとんどのプラットフォームでは' double'と同じサイズです。 –

答えて

9

代替品ではありませんが、java.lang.math.BigDecimalを使用できます。メモリが足りなくなるまで、およそ10桁の数字を格納できます。その任意の精度クラスは、あなたのコンピュータのメモリが不足するまで、あなたが望むほど大きくなるでしょう。 BigDecimalの文書を1として

不変、任意精度の符号付き小数。 BigDecimal は、任意の精度整数のスケーリングされていない値と、小数点の右側の の数字を表す 非負の32ビット整数スケールで構成されます。 BigDecimalが で表される数は(unscaledValue/10scale)です。 BigDecimalは、基本的な算術演算、スケール操作、比較、 ハッシング、およびフォーマット変換のための演算を に提供します。 BigDecimalの

+1

しかし、加算、減算などの算術演算に算術演算子を使用することはできません。 –

+0

@SunilKumarSahoo同じことをする方法があります。 BigIntegerとBigDecimalのJavaをサポートすることが示唆されています。 –

+0

とBigDecimalは不正確なエラーに悩まされません –

3

のJavaにはストレートの交換はありませんがあります。

この目的でBigDecimalを使用できます。

倍精度値が大きいほど、数学演算で使用する精度の損失が大きくなることを理解する必要があります。 BigDecimalは、この問題を認識するのに役立ちます。ここで

はBigDecimalを持つコードサンプルです:

String decimalString = "1423545135143513.523"; 
BigDecimal decimal = new BigDecimal(decimalString); 

By this linkあなたがBigDecimalクラスの使用と多くの例を見つけることができます。

+0

でも、算術演算には加算、減算などの算術演算子を使用できません。 –

+0

できます。例えばdecimal.divide(新しいBigDecimal( "11.11")); 私が投稿したリンクでAPIを読んでください。 私の投稿を編集し、リンクをたどり、いくつかの例を学びました。 – Artem

+0

decimal.divide()は演算子ではありませんメソッドですか?私は私のコメントで算術演算子を使用することはできないと述べました –

2

プリミティブ型では、浮動小数点を扱うdoubleやfloat以外はありません。

しかし、BigDecimalがお探しのものである可能性があります。

+0

しかし、加算、減算などの算術演算には算術演算子を使用できません。 –

+0

これはオブジェクトなので、通常の算術演算子は使用できません。 .add()、.subtract()などのAPIのメソッドを使用する必要があります。 少し面倒ですが、代わりに、より多くのパワーやその他の操作が必要になります。 3分の1の場合は例外がスローされるため、除算には注意が必要です。その後、非終端10進拡張になります。 – HeavenAgain

1

ドキュメントの状態:スケール(this.scale()、augend.scaleが最大値であるBigDecimalを(この+被加数)、およびを返し

追加(のBigDecimal被加数) ())。

import java.math.BigDecimal; 

    public class AddTwoBigNumbers{ 
     public static void main(String[] args) { 
     BigDecimal num1, num2; 
     num1 = new BigDecimal(50.00035); 
     num2 = new BigDecimal(100.0025); 
     Sum(num1, num2); 
     } 

     public static void Sum(BigDecimal val1, BigDecimal val2){ 
     BigDecimal sum = val1.add(val2); 
     System.out.println("Sum of two BigDecimal numbers: "+ sum); 
     } 
    } 
0

はありませんが、あなたはlong double型を使用して計算を行い、ネイティブメソッドを呼び出すためにJavaネイティブ・インターフェースを使用することができます。その後、10バイトで保存するか、切り捨てることができます。

最終的な二重切り捨てが許容される場合は、使用するVMによって中間値が長い倍精度値に格納される可能性があります。この場合、ネイティブメソッドは必要ありません。

関連する問題