2017-09-12 9 views
0

私が持っている中でのBigDecimal - .. Javaの

ターゲット= targetmax /難易度をこの計算を行う方法を

targetmax = 26959535291011309493156476344723991336010898738574164086137773096960

困難= 14484.162361

ターゲット= 26959535291011309493156476344723991336010898738574164086137773096960/14484.162361

ターゲット= 186131131

ターゲット= 1861311315012765306929610463010191006516769515973403833769533170

:私は本当に価値を期待してい1.861311315012765229690386592708552E + 63

:5012765306929610463010191006516769515973403833769533170

は、だから私は、それは

ターゲットを印刷し

double difficulty = 14484.162361; 

    String targetmaxStr = "26959535291011309493156476344723991336010898738574164086137773096960"; 

    BigDecimal targetmaxd = new BigDecimal(targetmaxStr); 

    BigDecimal difficultyd = new BigDecimal(difficulty); 

    BigDecimal targetd = targetmaxd.divide(difficultyd, MathContext.DECIMAL128); 

    System.out.println("target : " + targetD); 

として、Javaでこれを実行しようとしました

+1

それはその質問の重複ではありません。 –

+0

@MatthewMcPeak私はそれが本当だと信じています。不一致は、BigDecimal(double)コンストラクタの使用によって引き起こされます。これは、他の質問に対処しています。 –

+0

あなたはそうです、それは問題の組み合わせです。私の答えで指摘した問題と同様に、二重から難易度を作成することは不正確さを作り出しています。私は完全性のために私の答えを更新します。 –

答えて

2

3つの問題があります。

最初にtargetd.toPlainString())を使用して、科学的表記を避けてBigDecimalを印刷してください。

第2に、MathContext.DECIMAL128を使用して精度を制限しすぎています。代わりにnew MathContext(200)のようなものを試してみてください。

第3に、コメントで議論されたように、BigDecimaldoubleから作成すると、精度の問題が発生します。その代わりにStringから作成してください。

ここでは、すべて一緒です:

String targetmaxStr = "26959535291011309493156476344723991336010898738574164086137773096960"; 
BigDecimal targetmaxd = new BigDecimal(targetmaxStr); 
BigDecimal difficultyd = new BigDecimal("14484.162361"); 
BigDecimal targetd = targetmaxd.divide(difficultyd, new MathContext(200)); 
System.out.println("target : " + targetd.toPlainString()); 

結果:

対象:1861311315012765306929610463010191006516769515973403833769533170.5181511669744807274464658288015444595719414139754270599065953124329244737606680298383048483144520034008751609022370030307892100271382756

+0

Matthewありがとうございましたが、何とか最初の15桁だけが回答と一致し、残りの数字は一致しません。 – Jagdish

+0

私のアップデートre: 'BigDecimal(double)'コンストラクタと比較しましたか? –

+0

ああ、それは働いた..ありがとう – Jagdish