2009-04-30 14 views
0

私は7桁の2つの数値(ソースとターゲットレコードの数)を取り、目標数の不足レコードの割合を計算しようとしています。JSP内の浮動小数点数の計算に問題があります

たとえば、私のレコード数はソースで4084094、ターゲットで4081313になります。私は私の例えば

、私はおよそ0.0681パーセント

の値を取得する必要があります - ((ターゲット/ソース))×100(1):私はまた割合をカルクするフォロー式を使用していますJavaとJSPの初心者です。正しく表示するにはパーセンテージを取得できません。私は0に切り下げた値しか得られないようです。

私はBigDecimalも試してみました。

でも次の簡単なコードは1-1の値を表示するので、私は明らかに気にいらないが真剣に間違ってやっている:

<% 
BigDecimal percentMiss; 
long tmp = 600/500; 
percentMiss = BigDecimal.valueOf(tmp); 
%> 
<%=percentMiss.toString()%>-<%=tmp%> 

答えて

2

問題は次の行に

long tmp = 600/500; 

であるあなたが保存することはできませんlongの浮動小数点数ではなく、次のコードを使用することを検討してください。

double tmp = (double)600/(double)500; 

を計算し、tmpを表示します(計算結果を500/600に変更する必要があるため、ケース1では0と1の間の値をとる必要があります)。

+0

2番目の値をdoubleにキャストする必要はありませんが、通常はコードを読みやすくしています(少なくともimo ...) – Homes2001

+0

なぜ600Dと500Dなのでしょうか –

+0

この場合、Dはもっと短くて、それは本当です...私は変数でも使うことができる例を与えたいと思っていました(変数の末尾にDを追加してダブルにキャストすることはできません; ...))...) – Homes2001

3

2つの長い数値を分けることは明らかです。

DecimalFormatを使用して番号を表示することをおすすめします。あなたはJSTLを使用している場合は、より良い解決策を使用することですformat tags

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

<fmt:formatNumber value="${value}" minFractionDigits="2" maxFractionDigits="2"/> 
+0

彼は実際には2つのintを分けていません。 :) –

1

あなたの問題は、600と500は、整数値であり、それらの間の分裂は、あなたがに割り当てる整数結果を、持っているということです長い整数この後、結果の小数部分がなくなり(2回)、戻すことはできません。

分数結果を得るには、除算の入力値の少なくとも1つが非整数である必要があります。あなたはdoubleまたはfloatにそれらをキャストすることによって、またはリテラルを明示的にダブルすることによってこれを実現するか、次のように浮くことができます。

500.0 // implicitly double 
500f // float literal 
500d // double literal 

しかし、ダブル/フロートdivisonの結果を印刷することは、多くの場合、あなたより多くの小数点以下を持っていますthe way these numbers are stored as binary fractionsのため、結果に含まれてはいけない場合でも(たとえば、1/100.100000001490116119384765625になります)。

java.lang.DecimalFormatを使用してこれらの不要な数字を削除できますが、内部で小数点以下の桁数を使用するため、実際に正しい結果が得られ、丸めモードを正確に制御できるため、BigDecimalが適切です。もちろん、これはすでに壊れた結果を修正するための "ブードゥー素材"ではなく、計算自体にBigDecimalを使用する必要があります。

new BigDecimal(600).divide(new BigDecimal(500)) 

詳細については、API documentation for BigDecimalをお読みください。

+1

間違っています。整数は整数の除算を使用し、整数の結果を返します。 –

+0

あなたは正しいです。 +1 –

関連する問題