如何在 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 应用程序中禁用科学浮点表示法的主要内容,如果未能解决你的问题,请参考以下文章

Spyder 变量资源管理器:禁用科学记数法

汇编浮点指令

删除 kotlin android 中浮点值的科学记数法格式

C/C++中如何判断浮点类型相等?

浮点型是啥意思

如何在 Delphi 中将浮点值显示为科学参数