如何在 android 应用程序中禁用科学浮点表示法
Posted
技术标签:
【中文标题】如何在 android 应用程序中禁用科学浮点表示法【英文标题】:How to disable the Scientific Float notation in android application 【发布时间】:2012-02-25 04:02:49 【问题描述】:我正在执行基本的计算器示例。
将两个数字相除时,我得到了科学浮点数的结果。
当我划分3/2
时,我得到结果1.4E24
,但我需要正常值作为1.5
。
我正在使用 NDK。
函数使用如下
float res2 = nativeLib.divide(v1, v2);
s= ""+res2;
System.out.println(res2);
result.setText(s); >
函数调用在 NativeLib 类文件中 公共本机浮点除法(int x,int y);
Function 实现是 C 语言
JNIEXPORT jfloat JNICALL Java_com_example_Ndkdemo_NativeLib_divide
(JNIEnv * env, jobject obj, jint value1, jint value2)
float d= (value1 / value2) ;
return (d);
【问题讨论】:
@JOXTraex 感谢您的回复..我在创建.so文件后才对Java类文件进行了修改, 呃,你为什么要在jni里做除法?似乎..有点没有必要。 只是为了测试,以后我将使用媒体框架。所以我要去NDK 【参考方案1】:您可能希望将 value1/value2 转换为浮点数,而不仅仅是将其分配给浮点数。
【讨论】:
我也试过了,我认为C代码给出浮点值没有问题,Java代码有问题不是吗? 我试过这个先生,float d =(float)(v1/v2) 是否有可能将科学浮点数转换为正常值 我不明白你是如何从计算中得到如此庞大的数字的。打印 v1 和 v2 是什么。 我得到了我在 EditText 框中输入的内容,返回值是我在 Logcat 中打印的科学浮点值。 你能发布你是如何从 EditText 获得它的吗?显示(获取编辑文本)-> 转换为类型-> 传递给方法-> 返回值的过程。【参考方案2】:您的 C 代码有轻微损坏。你需要两个整数并做float = int / int
。这里的问题是转换规则使得 C 将首先将一个 int 除以另一个,然后转换为 float。所以通过 3, 2 将导致 3/2 == 1,而不是 1.5。
你想要的东西更像
float d = (float) value1 / value2;
你要回来的 1.4e24。那就是返回值被破坏了。
这是因为您将除法函数声明为 Float
而不是 float
。这些不是一回事。 Float
是一个装箱值,绝对与 C 端的 jfloat
不同。
如果您将原生声明更改为
public native float divide(int x, int y);
它应该开始正常工作。 (注意 'float' 缺少大写字母!)
【讨论】:
以上是关于如何在 android 应用程序中禁用科学浮点表示法的主要内容,如果未能解决你的问题,请参考以下文章