さて、これが私の問題です。基本的に私はこの問題を抱えています。
.53999999 のような番号があります。数学関数を使用せずに 54 に切り上げるにはどうすればよいですか?
スケーリングするには100を掛けてから割る必要があると思いますか?そんな感じ?
問題はお金です。$50.5399999 を持っているとしましょう。$50 を手に入れる方法は知っていますが、セントを手に入れる方法はわかりません。.539999 の部分を取得できますが、54 セントにする方法がわかりません。
私は次のようなものを使用します:
BigDecimal result = new BigDecimal("50.5399999").setScale(2, BigDecimal.ROUND_HALF_UP);
Make cents with BigDecimal on JavaWorldという素晴らしい記事がありますので、ぜひご覧ください。
お金を表すには、浮動小数点ではなく、10 進数または通貨型を使用する必要があります。
50.54 が倍精度で表現できない場合、丸めは役に立ちません。
50.53999999 を整数のドルと整数のセントに変換しようとしている場合は、次のようにします。
double d = 50.539999; // or however many 9's, it doesn't matter
int dollars = (int)d;
double frac = d - dollars;
int cents = (int)((frac * 100) + 0.5);
最後のステップでの 0.5 の追加は、セントの最も近い整数に丸められることに注意してください。常に切り上げたい場合は、0.5 の代わりに 0.9999999 を追加するように変更します。
数学関数を使用したくないのはなぜですか?
static long round(double a)
-引数に最も近い long を返します。
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html
お金を表すために、車輪を再発明する代わりに、次のアドバイスを使用します。
long を使用して、通貨をセント数として保存してみてください (これを基本通貨単位の数に抽象化できます)。
編集:これは宿題なので、タイプを制御できない場合があります。これを将来のプロジェクトの教訓と考えてください
long money = 5054;
long cents = money % 100;
long dollars = money / 100; // this works due to integer/long truncation
System.out.printf("$%d.%02.d", dollars, cents);
.535 という数値を作成し、それを元の数値と比較して、切り上げるか切り下げるかを確認する必要があります。.53999999 から .535 を取得する方法は次のとおりです (任意の数値で機能するはずです)。
num = .53999999;
int_num = (int)(num * 100); // cast to integer, however you do it in Java
compare_num = (int_num + 0.5) / 100;
compare_num
この場合、.535 になります。num
が より大きいか等しい場合はcompare_num
、 に切り上げint_num + 1
ます。それ以外の場合は、単純に に切り捨てますint_num
。
ショーンはそれを持っているようですが、適切なルールを課したい場合は、次のように if ステートメントを挿入することをお勧めします。
double value = .539999;
int result = (int) (value*100);
if(((value*100)%result)>.5)
result++;
double 値の丸めには long を使用することをお勧めします。数が少ない場合は問題ありませんが、違いが生じる可能性があります。
double d = 50.539999;
long cents = (long)(d * 100 + 0.5);
double rounded = cents/100;
正確に何をしようとしていますか?あなたは常に二桁に行こうとしていますか?それとも、何があっても最後に 99999 のようなものを常に修正しようとしていますか?
コメントによると、それは実際には前者であり、ドルとセントに丸められます。ですから、まさにround(100*a)/100
あなたが望むものです。(後者はもっと複雑になる...)
最後に、セントの部分だけを抽出したい場合は、次のようにします。
dollars_and_cents = round(100*a)/100
cents = (dollars_and_cents-(int)dollars_and_cents)*100
(または、java は単にfrac
? の場合、最後の行はfrac(dollars_and_cents)*100
.