Странный вывод с плавающей запятой "@.0E-12" на плеере BlackBerry Android

У меня есть приложение, которое хорошо работает на многих устройствах Android, но есть проблема на плеере Android BlackBerry, работающем на PlayBook (на нем работает Android 2.3).

У меня было NumberFormatException для PreferenceManager.getDefaultSharedPreferences(). Оказалось, что в файле настроек поплавок был сохранен как "@.0E-12". Я сделал этот простой тест:

float f = 1.0e-12f;
System.out.println (f); // prints "@.0E-12" on BlackBerry PlayBook !!

Как это может быть?

2 ответа

Если ваш вопрос как это может быть? Я думаю, вы можете скачать исходный код Android, найти соответствующие источники в libcore/luni/src/main/java/java/lang и, начиная с Float.toString(), начать импортировать функцию по функции в ваш проект, проверяя каждый время, когда ошибка все еще замечена. Вы найдете ошибку, скорее всего, это связано с математикой FP. (Может быть, что-то вроде случайных битов в наименее значимой части мантиссы.)

Это очень небольшое число (т. е. 0,000000..01).
если это что-то значит для вас, вы можете попробовать BigDecimal,
в противном случае вы можете решить, что числа, меньшие x (вы решаете, насколько мал x), равны 0.

Другие вопросы по тегам