Двойной на Android. Странное округление - PullRequest
0 голосов
/ 10 февраля 2012

На Android (Nexus One 2.3.7) я получаю строку из сокета "0 54.95325 0 0; 0 0 0 0" Затем я делаю следующее:

DecimalFormatSymbols sym = new DecimalFormatSymbols();
sym.setDecimalSeparator(',');
DecimalFormat form = new DecimalFormat("");
form.setDecimalFormatSymbols(sym);              

String[] tokens = null;
String[] tempData = null;
tring[] windData = null;

tokens = line.split(";");
tempData = tokens[0].trim().split("\\s"); // OR " ";
windData = tokens[1].trim().split("\\s");  

for (int i = 0; i < currentTemp.length; i++)
    currentTemp[i] = form.parse(tempData[i]).doubleValue();

Log.d("CurrentTemp0: ", currentTemp[0]+"");
Log.d("CurrentTemp1: ", currentTemp[1]+"");

И в журнале вижу: CurrentTemp1: (5554): 54.0.Почему 54,0 ??Это должно быть 54,95325.

Я не знаю, что думать ...

Вот журнал с другого Nexus One (2.3.5):

D/Socket:(9855): 73,8189241834073 73,8812582487619 73,5927450599115 73,0117432312163 ; 3,70756496056335 3,68967387857366 4,05669701334867 3,87624105013732 
D/CurrentTemp0:(9855): 73.8189241834073
D/CurrentTemp1:(9855): 73.8812582487619
D/CurrentTemp2:(9855): 73.5927450599115
D/CurrentTemp3:(9855): 73.0117432312163

Видзагадка ...

Ответы [ 2 ]

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

Я не знаю, что не так с DecimalFormat, но я изменил его с помощью Double, и он отлично работает:

String buf = tempData[i].replace(",", ".");
currentTemp[i] = Double.parseDouble(buf);
0 голосов
/ 10 февраля 2012

Ваш шаблон пуст, что может быть причиной, если вы хотите, чтобы все значения после точки, вам нужно указать

DecimalFormat form = new DecimalFormat("###.#####");

Вот ссылка для возможных десятичных форматов .

...