我正在执行基本的计算器示例。
在将两个数字相除时,我得到了科学浮点记数法的结果。
当我除以3/2时,我得到的结果是1.4E24,但我需要normal的值作为1.5。我正在使用NDK。函数用法如下
float res2 = nativeLib.divide(v1, v2);
s= ""+res2;
System.out.println(res2);
result.setText(s); >函数调用位于NativeLib类文件中
public native Float divide(int x, int y); 函数实现是用C语言实现的
JNIEXPORT jfloat JNICALL Java_com_example_Ndkdemo_NativeLib_divide
(JNIEnv * env, jobject obj, jint value1, jint value2)
{ float d= (value1 / value2) ;
return (d);} 发布于 2012-02-03 16:32:25
您可能希望将value1/value2转换为浮点数,而不仅仅是将其赋值给浮点数。
发布于 2012-02-13 17:48:49
你的C代码被轻微损坏了。您将获取两个int并执行float = int / int。这里的问题是,强制转换规则是这样的:C首先将一个int除以另一个,然后强制转换为float。因此,传递3,2将导致3/2 == 1,而不是1.5。
你想要更像这样的东西
float d = (float) value1 / value2;Re是你要返回的1.4e24。这就是返回值被破坏的原因。
这是因为您将divide函数声明为Float而不是float。这不是一回事。Float是一个盒装的值,并且与C端的jfloat绝对不是同一类型。
如果将本机声明更改为
public native float divide(int x, int y);一切都应该开始正常工作。(请注意“float”中缺少大写字母!)
https://stackoverflow.com/questions/9113365
复制相似问题