2013-04-04 4 views
3

У меня есть текстовое поле, которое принимает номера. Эти числа будут сохранены в базе данных. Когда я ввожу число, например 2,35, и конвертирую в float и отправляю в базу данных, я получаю ошибку, потому что база данных принимает только число с точкой, например. 2,35Преобразовать число в текстовое поле для плавания C#

float num = float.Parse(textBox1.Text); 

Num еще

2.25

Как управлять этим? Я пробовал с CultureInfo.InvariantCulture, но я никогда не получаю то, что хочу

+0

Почему вы используете запятую вместо точки? – XTGX

+1

Где вы получаете сообщение об ошибке? Если это проблема с хранением данных в базе данных, нам нужно будет увидеть ваш код SQL. –

+0

Вы можете использовать простую строку 'string.Replace' для замены запятых точками. – Nolonar

ответ

1

Самый простой способ - заменить ',' на. например:

float num = float.Parse(textBox1.Text); 
string stringValue = num.ToString().Replace(',', '.'); 

Затем отправьте «stringValue» в базу данных.

Я надеюсь, что это поможет вам.

+0

Это последнее решение хорошее, но нет, если я хочу сохранить значение текстового поля в свойстве float ... там должно быть универсальное решение для всех ... – Josef

1

использовать это:

CultureInfo.CreateSpecificCulture("en-US"); 

У меня такая же проблема тогда и она решается с помощью кода выше

1

num является 2,25, потому что он показал вам в вашей культуры. Он будет правильно передан в базу данных при условии использования обычных механизмов (то есть подготовленных операторов с параметрами). Если вы настаиваете на том, чтобы вручную склеить SQL, тогда, в любом случае, используйте формат InvariantCulture, но, как правило, не делайте этого.

1

Это общая проблема глобализации. То, что вы должны определить, - это единая культура, в которой хранится сама информация, поскольку вы храните ее как строковое значение. Затем ВСЕ ВСЕ ваши данные вводятся и обрабатываются с использованием этой культуры. В нашем коде, мы имеем несколько блоков, которые внешне похожи на это для того, чтобы справиться с поликультурного математики и отображения данных:

//save current culture and set to english 
CultureInfo current = System.Threading.Thread.CurrentThread.CurrentCulture; 
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 

//Do Math and Data things 

//restore original culture 
System.Threading.Thread.CurrentThread.CurrentCulture = current; 

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

Редактировать

Для сохранения данных и преобразование числа в строку, вы могли бы сделать вещи точно так же. Хотя у вас есть текущие настройки CultureInfo как «en-US», методы .ToString() со всех номеров будут использовать «.». вместо «,» для десятичной точки. Другой способ сделать это - указать поставщика формата при вызове .ToString().

decimalNumber.ToString(new CultureInfo("en-US")); 

Это указывает, что при преобразовании числа в строку используйте NumberFormat из предоставленной культуры.

+0

Это прекрасно работает, сохраняется всегда одинаково. Десятичный вход; CultureInfo current = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US"); input = decimal.Parse (textBox1.Text.Replace (',', '.')); System.Threading.Thread.CurrentThread.CurrentCulture = current; Например, если пользователь вводит 4,5 или 4,5, выход будет 4,5. Хорошо. Но если я хочу сохранить это значение в db-таблице, я должен преобразовать в строку и заменить запятую точкой. Я хочу избежать этого. Есть ли другой способ справиться с этим? – Josef

2

Вы можете попробовать следующее:

float.Parse(textBox1.Text.Trim(), CultureInfo.InvariantCulture.NumberFormat); 

Я надеюсь, что это будет уже решен вопрос.

+1

Короткое простое решение и отлично работает! – DarkAngel

 Смежные вопросы

  • Нет связанных вопросов^_^