Конвертировать с плавающей точкой строку с запятой и точкой - PullRequest
4 голосов
/ 06 декабря 2010

У меня есть обнуляемое число. Внутренние десятичные разряды могут быть разделены точкой или запятой, например, 1,2 или 1,2. Мне нужно это число в виде строки, чтобы сравнить его с регулярным выражением. Если я использую метод Convert.toString, число с запятой равно 12, а не 1,2. Как я могу преобразовать число с плавающей точкой в ​​строку без потери запятой или точки? Я уже попытался преобразовать это с различными культурами.

Спасибо за вашу помощь

Ответы [ 6 ]

3 голосов
/ 06 декабря 2010

Решением для этого может быть следующее:

float? num = 1.2f;
string floatAsString = string.Format("{0:f}", num.Value);

Возможно, перед использованием значения вам необходимо проверить, является ли свойство HasValue true. Для дополнительных примеров: http://alexonasp.net/samples/stringformatting/

0 голосов
/ 07 декабря 2010

Хорошо, я решил проблему.Я сделал в своем xaml конвертер, который позволяет вводить значения только с запятыми в качестве разделителя, поэтому мне не нужны никакие проверки, если есть только два внутренних десятичных знака.Спасибо за вашу помощь

0 голосов
/ 06 декабря 2010

Если это приложение WinForm, есть статическая переменная Application.CurrentCulture.NumberFormat.NumberDecimalSeparator.

В зависимости от ее значения вы получите разные результаты при конвертации ToString().Попробуйте манипулировать этим параметром для достижения необходимого результата.

0 голосов
/ 06 декабря 2010

Вы уверены, что текстовое поле допускает оба "."и "," в качестве десятичного разделителя (в отличие от символа группировки, также известного как разделитель тысяч)?

Если вы уверены, что у вас есть только десятичные разделители и нет символов группировки, замените любые ", "с". "перед использованием TryParse с InvariantCulture для преобразования строки в число с плавающей точкой.
ИЛИ используйте ту же культуру в коде, что и на стороне клиента, поэтому оба будут использовать одинаковые десятичные разделители.

Как уже упоминалось,float не имеет понятия различных десятичных разделителей.

0 голосов
/ 06 декабря 2010

Попробуйте:

string s = yourFloat.ToString();

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

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

0 голосов
/ 06 декабря 2010

Функция String.Format () с маской. Но можете ли вы преобразовать свои строки в числа, а не числа в строки, для сравнения? Это должно быть сравнение регулярных выражений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...