parseFloat независимость от региональных настроек
От: Аноним  
Дата: 02.10.09 10:03
Оценка:
Проблема как обычно :

parseFloat( "0.55" ) — работает
parseFloat( "0,55" ) — не работат

решил сначала следюущим образом

function parseFloatUniversal( string_value )
{
var str = string_value.replace( new RegExp( "[,]" ), '.' );
return parseFloat( str );
}


Потом подумалось а что если на вход прийдет строка с точкой а у пользователя в региональных будет запятая.
Соотвественно получилось следующее решение приведенное ниже.
Нельзя ли как-то попроще ?


function CheckOnZero( string_value )
{
    return ( string_value.search( new RegExp( "[1-9]" ) ) == -1 )
}

function parseFloatUniversal( string_value )
{

// учитывая что parseFloat вовзращает 0 в случае неверного формата строки
// проверяем не является ли строка нулевой , например '0,000' или '0.00000' , '0' и др. варианты
// если строка содержит только нули то возвращаем 0 и выходим из функции
if ( CheckOnZero( string_value ) )
  return 0;

// теперь если функция вернет 0 значит не смогла распарсить число
var res = parseFloat( string_value );

if ( res != 0 )
  return res;

// по умолчанию распарсить не удалось, пробуем заменить ',' на '.' 
res = parseFloat( string_value.replace( new RegExp( "[,]" ), '.' ) );
if ( res != 0 )
   return res;

// по умолчанию распарсить не удалось, пробуем заменить '.' на ',' 
res = parseFloat( string_value.replace( new RegExp( "[.]" ), ',' ) );
if (res != 0 )
   return res;

return null;

}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.