1

私は本当に大きなdouble値を処理する必要があり、それらを次の完全な数値に丸める必要があります。double値を丸めると、常に最大のlong値である値9.223372036854776E18を受け取ります。これより大きい値を丸めるにはどうすればよいですか?

編集:明確にするために:私はJavaプログラマーではなく、Cの最前線から来ています。私はこの事件で友人を助けています。unsigned(明らかに機能しませんでした)を試し、googledして、BigDecimalとBigIntegerを見つけました。それらをキャストしようとしましたが、たまたまクラッシュしました。だから私はここに来ました。私を助けてくれてありがとう!

4

5 に答える 5

5

BigDecimallongより大きい値を含めるためのソリューションになります。

このBigDecimaljavadocを読む

BigDecimal(yourDoubleValue);キャストせずにインスタンス化する必要があります。

于 2012-11-09T03:18:17.283 に答える
3

本質的に:

Math.floor(d+0.5)

dただし、が負の場合は減算に調整する必要があります。

于 2012-11-09T03:45:53.563 に答える
2

BigDecimalを使用する

例えば

BigDecimal decimalA = new BigDecimal("98765432123456789");
于 2012-11-09T03:19:02.770 に答える
2

BigDecimal は、任意の double 値と float 値を保持できます。double から BigDecimal に変換するには、次のようなコードを使用します。

double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);

最も近い整数値に丸めるには、次のようなコードを使用できます。

BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
于 2012-11-09T03:23:34.467 に答える
2

double大きすぎて に収まらない値は、すでにlong整数値を表しているため、丸めても効果はありません。これは、 double は仮数部で 52 ビットの精度しか保持できず、 long は 64 ビットしか保持できないためです。つまり、値が a に対して大きすぎる場合、longdoubleは小数部分を保持するのに十分な精度が残っていません。

于 2012-11-09T04:07:53.210 に答える