2015-01-21 4 views
0

У меня есть следующий случай: со стороны клиента я получаю двойное значение в строке, это может быть либо в формате «en-GB», либо в формате de, т.е. 123.10 или 123,10. Однако мне нужно преобразовать оба эти числа в 123.10. Я попробовал то есть писать следующий тест, используя NumberFormatInfo, однако он не проходит:Преобразование чисел в один формат в C#

var format = new NumberFormatInfo { NumberGroupSeparator = ",", NumberDecimalSeparator = "." }; 

     var a = Double.Parse("23000.10", format); 
     var b = Double.Parse("23000,10", format); 

     Assert.AreEqual(a,b); 

Что я делаю неправильно?

+0

Вы просто подтвердили, что струны производят различные значения в ан-ГБ. Вы уже знали это, не так много смысла в тестировании. Перейдите в Assert.AreNotEqual(), чтобы пройти тест. –

+0

правильно ... как заставить их производить одинаковое значение без ручной проверки запятой и замены ее на десятичную. – user1950055

+0

'Random.Next' будет более читаемым способом получения случайных результатов от ввода пользователем. '23.000,44' должен дать вам некоторые интересные результаты ... Нет никакого способа сделать то, что вы хотите, не зная входной формат (Culture in .Net terms). –

ответ

1

как сделать, чтобы они производят такое же значение

Вы не можете, не зная контекста - если вы не знаете контекст ввода нет никакого способа отличить, если 123,456 означает 123456 или 123.456.

Если ваш вход никогда не содержит разделителей тысяч (что похоже на ваш пример), то замена запятых на периоды является разумным решением.

1

Ну, есть проблема с таким преобразованием.

Во всяком случае, в каком-то проекте я использовал следующий код:

double a = 0; 
double b = 0; 

double.TryParse("23000.10".Replace(",","."), out a); 
double.TryParse("23000,10".Replace(",", "."), out b); 

Assert.AreEqual(a,b); 

не лучший способ сделать, но это работает.

1

Вы должны указать данные культуры, попробуйте с этим:

var cultureInfo1 = new CultureInfo("de-DE"); 
var cultureInfo2 = new CultureInfo("en-GB"); 

var a = Double.Parse("1200,00", cultureInfo1); 
var b = Double.Parse("1200.00", cultureInfo2); 

Assert.AreEqual(a,b); 
Смежные вопросы