Есть значение "0.00000" как привести к decimal. ПРобовал Parse но выдаёт ошибку потому что разделитель точка. Хочется стандартный метод вызывать. Не подскажете?
QL>using System.Globalization;
QL>...
QL>string x = "0.00000";
QL>decimal y = decimal.Parse(x, CultureInfo.InvariantCulture);
QL>
И теперь ругнется на запятую...
Нет стандартного — свой писать с Invariant и Current Culture (или даже сложнее). Что сработает.
Править или нет — в зависимости от задачи.
Здравствуйте, Аноним, Вы писали:
А>Есть значение "0.00000" как привести к decimal. ПРобовал Parse но выдаёт ошибку потому что разделитель точка. Хочется стандартный метод вызывать. Не подскажете?
Вот
Function DecimalParceMotherFucker(ByVal strText_I As String) As Decimal
Dim strText As String = strText_I.Replace(" ", "") ' Пробелы за людей не считаю!Dim strARR() As String = (New Text.RegularExpressions.Regex("[^\d]")).Split(strText)
strARR(strARR.Length - 1) = "." & strARR(strARR.Length - 1)
Return Decimal.Parse(String.Join("", strARR), Globalization.CultureInfo.InvariantCulture)
End Function
покатит?
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Ну и штоп школота не гафкала, improved version таскаать:
Function DecimalParceMotherFucker(ByVal strText_I As String) As Decimal
Dim strText As String = strText_I.Replace(" ", "") ' Пробелы за людей не считаю!Dim strARR() As String = (New Text.RegularExpressions.Regex("[^\d]+")).Split(strText)
strARR(strARR.Length - 1) = "." & strARR(strARR.Length - 1)
Return Decimal.Parse(String.Join("", strARR), Globalization.CultureInfo.InvariantCulture)
End Function
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
N_P>>Впрочем, может я и ошибаюсь. QL>Ну если разделитель в строке точно не известен, то задача в общем виде не решается.
Почему ? Решается, всего-то вариантов:
1) Без знаков — автоматом
2) . или , между разрядами
3) . или , между тысячами
4,5) Комбинации 2 и 3
На "-" в начале или конце числа заглядываться не будем.
Даже в общем случае — максимум 4 культуры подобрать, причем автоматически — просто перебором культур найти соответствующие. Однако, в реальности — культур не так много на которые надо закладываться.
Или тупо при 2х знаках считать левый знак — междутысячным, правый — десятичным и заменить их как символы в строке на что надо.
Вот есть у автора "345.567" числа вместо положенных "345.567,00" — тогда ой...
Просто это именна та фигня, что достает страшно тем, что не реализована "из коробки".
Здравствуйте, Nikolay_P_I, Вы писали:
N_P>И теперь ругнется на запятую... N_P>Нет стандартного — свой писать с Invariant и Current Culture (или даже сложнее). Что сработает.
А не проще попробовать просто так, как есть, а если не получится — заменить точку на запятую (или запятую на точку, в зависимости от того, что в строке есть) и попробовать еще раз ? Какой-нибудь вариант да сработает — третьего вроде не дано.
Здравствуйте, Nikolay_P_I, Вы писали:
N_P>>>Впрочем, может я и ошибаюсь. QL>>Ну если разделитель в строке точно не известен, то задача в общем виде не решается. N_P>Почему ? Решается, всего-то вариантов: N_P>1) Без знаков — автоматом N_P>2) . или , между разрядами N_P>3) . или , между тысячами N_P>4,5) Комбинации 2 и 3
Любой уважающий себя тестеровщик обязан иметь установленной на компьютере культуру, в которой десятичный разделитель:
^&
а разделитель тысячных разрядов:
~*
а показатель отрицательности ничем не хуже
@
И только тогда есть возможность обучить кодеров хоть что-то, хоть числа, более-менее парсить.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Любой уважающий себя тестеровщик обязан иметь установленной на компьютере культуру, в которой десятичный разделитель:
Или любой уважаемый тестерами кодер. :-)
PS: Кстати, таким методом был найден глюк в VB6 runtime: она только первую букву из системного разделителя разрядов берёт.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Nikolay_P_I, Вы писали:
N_P>>>>Впрочем, может я и ошибаюсь. QL>>>Ну если разделитель в строке точно не известен, то задача в общем виде не решается. N_P>>Почему ? Решается, всего-то вариантов: N_P>>1) Без знаков — автоматом N_P>>2) . или , между разрядами N_P>>3) . или , между тысячами N_P>>4,5) Комбинации 2 и 3
_FR>Любой уважающий себя тестеровщик обязан иметь установленной на компьютере культуру, в которой десятичный разделитель: _FR>
^&
_FR>а разделитель тысячных разрядов: _FR>
~*
_FR>а показатель отрицательности ничем не хуже _FR>
@
_FR>И только тогда есть возможность обучить кодеров хоть что-то, хоть числа, более-менее парсить.
Но даже это освобождает от необходимости вместе со decimal-строкой передавать культуру, в которой эта строка представлена (а точнее настройки культуры).