2012-02-02 9 views
0

私は基本的な電卓の例を実行しています。アンドロイドアプリケーションでScientific Float記法を無効にする方法

2つの数字を分割しているうちに、私は科学浮動表記の結果を得ています。

3/2結果が1.4E24ですが、1.5という通常の値が必要です。 私はNDKを使用しています。 関数の使用は、関数呼び出しが
パブリックネイティブ浮動小数点除算(INTのx、int型のy)をファイルNativeLibクラスにある

float res2 = nativeLib.divide(v1, v2); 
s= ""+res2; 
System.out.println(res2); 
result.setText(s); > 

未満です。

と関数実装されるC LANG

JNIEXPORT jfloat JNICALL Java_com_example_Ndkdemo_NativeLib_divide 
(JNIEnv * env, jobject obj, jint value1, jint value2) 
{ float d= (value1/value2) ; 
return (d);} 
+0

コードを投稿してください。 – JoxTraex

+0

@ JOXTraex返信いただきありがとうございます.i Javaのクラスファイルの変更は.soファイルの作成後にのみ行われました。 – Chandu

+0

ええ、なぜjniで部門をやっていますか?何か必要ないようです。 – JoxTraex

答えて

0

は、あなただけのフロートに割り当て、フロートにVALUE1/VALUE2をキャストしない場合がありますです。

+0

に行くつもりです。私はそれも試しましたが、Cコードの浮動小数点値に問題はないと思いますが、Javaコードに問題はありませんか? – Chandu

+0

int/int = int浮動小数点ではありません – JoxTraex

+0

フロートd =(浮動小数点数)(v1/v2)科学浮動小数点を通常の値に変換する可能性はありますか? – Chandu

0

あなたのCコードは軽度に壊れています。あなたは2つのintを取って、float = int/intをやっています。ここで問題となるのは、キャストルールは、Cが最初にintをもう一方の整数で割ってからfloatにキャストするというものです。 3、2を渡すと、1.5ではなく3/2 == 1となります。

あなたが戻って取得している1.4e24再より

float d = (float) value1/value2; 

ような何かをしたいです。それは戻り値が壊れていることです。

floatではなく、除算関数をFloatと宣言しているからです。これらは同じものではありません。 Floatは箱入りの値であり、C側のjfloatと同じタイプではありません。

あなたは

public native float divide(int x, int y); 

にネイティブ宣言を変更した場合、それはすべて正常に作業を開始する必要があります。 (「フロート」に大文字がないことに注意してください)

関連する問題