Проблема как обычно :
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;
}