首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android应用程序中禁用科学浮点数

如何在android应用程序中禁用科学浮点数
EN

Stack Overflow用户
提问于 2012-02-02 21:42:24
回答 2查看 246关注 0票数 0

我正在执行基本的计算器示例。

在将两个数字相除时,我得到了科学浮点记数法的结果。

当我除以3/2时,我得到的结果是1.4E24,但我需要normal的值作为1.5。我正在使用NDK。函数用法如下

代码语言:javascript
复制
 float res2 = nativeLib.divide(v1, v2);
 s= ""+res2;
 System.out.println(res2);
 result.setText(s); >

函数调用位于NativeLib类文件中

代码语言:javascript
复制
    public native Float divide(int x, int y); 

函数实现是用C语言实现的

代码语言:javascript
复制
JNIEXPORT jfloat JNICALL Java_com_example_Ndkdemo_NativeLib_divide
(JNIEnv * env, jobject obj, jint value1, jint value2)
{    float d= (value1 / value2) ;
return (d);} 
EN

回答 2

Stack Overflow用户

发布于 2012-02-03 16:32:25

您可能希望将value1/value2转换为浮点数,而不仅仅是将其赋值给浮点数。

票数 0
EN

Stack Overflow用户

发布于 2012-02-13 17:48:49

你的C代码被轻微损坏了。您将获取两个int并执行float = int / int。这里的问题是,强制转换规则是这样的:C首先将一个int除以另一个,然后强制转换为float。因此,传递3,2将导致3/2 == 1,而不是1.5。

你想要更像这样的东西

代码语言:javascript
复制
float d = (float) value1 / value2;

Re是你要返回的1.4e24。这就是返回值被破坏的原因。

这是因为您将divide函数声明为Float而不是float。这不是一回事。Float是一个盒装的值,并且与C端的jfloat绝对不是同一类型。

如果将本机声明更改为

代码语言:javascript
复制
public native float divide(int x, int y);

一切都应该开始正常工作。(请注意“float”中缺少大写字母!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9113365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档