Как отключить нотацию Scientific Float в приложении для Android - PullRequest
0 голосов
/ 02 февраля 2012

Я выполняю базовый пример калькулятора.

При делении двух чисел я получаю результат в научной плавающей записи.

Когда я делю 3/2 Я получаю результат 1.4E24, но мне нужно нормальное значение как 1.5.Я использую NDK.Использование функции ниже

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

Вызов функции находится в файле класса NativeLib
общедоступный собственный разделитель Float (int x, int y);

И реализация функции - это 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);} 

Ответы [ 2 ]

0 голосов
/ 13 февраля 2012

Ваш код C слегка сломан.Вы берете два целых и делаете float = int / int.Проблема здесь в том, что правила приведения таковы, что C сначала делит одно int на другое, а затем приводит к плавающему.Таким образом, прохождение 3, 2 приведет к 3/2 == 1, а не к 1,5.

Вы хотите что-то более похожее на

float d = (float) value1 / value2;

По отношению к 1.4e24, которое вы получаете.Это возвращаемое значение искажается.

Это потому, что вы объявляете функцию деления как Float вместо float.Это не одно и то же.Float - это значение в штучной упаковке, и оно определенно не того же типа, что и jfloat на стороне C.

Если вы измените собственное объявление на

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

, оно должновсе начинают работать правильно.(обратите внимание на отсутствие заглавной буквы на 'float'!)

0 голосов
/ 03 февраля 2012

Возможно, вы захотите привести значение1 / значение2 к числу с плавающей точкой, а не просто присвоить его элементу с плавающей точкой.

...