Firefox не будет преобразовывать строку в число в flex - PullRequest
1 голос
/ 27 марта 2009

Я делаю веб-приложение во Flex, используя глобальные координаты

Я получаю координаты в виде строк из веб-службы, затем я делаю что-то вроде этого:

latStr:String = "28.7242100786401";
longStr:String = "-106.12635420984";

var cLat:Number = new Number(latStr);
var cLong:Number = new Number(longStr);

Это работает ОТЛИЧНО в IE и chrome, с веб-сервера и при локальной отладке, но Firefox работает только при локальной отладке , а не с веб-сервера, на веб-сервере cLat и cLong возврат "NaN".

Проверьте сами, при нажатии на результат должно появиться предупреждение: http://mundobuk.com/prueba/mapa/main.html?buscar=oxxo

, поэтому я попытался использовать parseFloat(), но оно округляет cLat до 28 и cLong до -106: (

Затем я попытался отделить десятичные числа от целых чисел, как в моем примере 28 и 7242100786401, затем разделить 7242100786401/10000000000000 = 0,7242100786401

с двумя числами 28 и 0,7242100786401 Я добавляю их

28 + 0,7242100786401 = 28,7242100786401

здесь в кодовой форме:

var latArr:Array = latStr.split(".");
var longArr:Array = longStr.split(".");


var latDivStr:String = "1";
for (var i:int= 0; i< latArr[1].length; i++){
latDivStr += "0";
}

var longDivStr:String = "1";
for (var j:int = 0; j< longArr[1].length; j++){
longDivStr += "0";
}
var cLat:Number = parseFloat(latArr[0]) + arseFloat(latArr[1])/parseFloat(latDivStr);
var cLong:Number = parseFloat(longArr[0]) - parseFloat(longArr[1])/parseFloat(longDivStr);

опять же, этот способ отлично работает везде, только не в Firefox на веб-сервере> _>

у кого-нибудь есть идеи? я схожу с ума от этого @ _ @

Ответы [ 3 ]

1 голос
/ 27 марта 2009

Запятая является разделителем для многих европейских стран, поэтому, скорее всего, это региональная конфигурация на сервере или на клиенте.

1 голос
/ 27 марта 2009

Я никогда не слышал о такой ошибке, поскольку во время выполнения Flash предполагается, что разные браузеры и ОС интерпретируют SWF одинаково. Я скажу, что я не верю, что вы должны использовать «новый» перед кастингом номера.

latStr:String = "28.7242100786401";
longStr:String = "-106.12635420984";

var cLat:Number = new Number(latStr);
var cLong:Number = new Number(longStr);

Это должно быть:

var cLat:Number = Number(latStr); //Number is right because its a Floating Point, but remove new.
var cLong:Number = Number(longStr); //Number is right because its a Floating Point, but remove new.

Я проверил следующее, и не увидел округления.

var latStr: String = "28.7242100786401"; var longStr: String = "-106.12635420984";

trace(parseFloat(latStr)); //Outputs:  "28.7242100786401";
trace(parseFloat(longStr)); //Outputs:  "-106.12635420984";

trace(Number(latStr)); //Outputs:  "28.7242100786401";
trace(Number(longStr)); //Outputs:  "-106.12635420984";

Я не понимаю, зачем вам этот обходной путь. Также я использую Firefox в качестве основного браузера, и ваш сайт работает нормально.

Приветствие.

0 голосов
/ 27 марта 2009

Я наконец выяснил, почему он не работает, по какой-то причине в Firefox вместо чтения точки (.) Он читает запятую (,) из веб-службы (сделано в vb.net)

локально он также читает его как точку, а не в сети, поэтому я полагаю, что он должен что-то делать с моим сервером IIS O_o

надеюсь, это поможет кому-то там ...

...