Конвертировать Float с точкой вместо запятой? - PullRequest
10 голосов
/ 11 декабря 2008

У меня есть данные из таблицы в базе данных (строка), которые содержат текст и цену. Я извлекаю цену из данных, но моя проблема в том, что иногда я могу конвертировать ее в плавающее, а иногда нет.

Я заметил, что:

Convert.ToSingle(m.Groups[1].Value);

Это работает, но не всегда, потому что иногда возникает проблема с точкой (требуется запятая). Что я могу сделать? Я пытаюсь заменить «.» На «,», но иногда на другом ПК это период, который требуется!

Ответы [ 4 ]

21 голосов
/ 11 декабря 2008

У вас есть эта проблема, потому что преобразование проверить язык вашего компьютера. Вам нужно будет сделать что-то вроде:

Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture.NumberFormat);

Таким образом, он не будет проверять язык ПК. Вы можете найти больше информации о InvariantCulture от MSDN. У меня есть что-то похожее в проекте, и мое преобразование работает.

5 голосов
/ 11 декабря 2008

Или запросите этот конкретный числовой формат явно:

System.Globalization.NumberFormatInfo nf
  = new System.Globalization.NumberFormatInfo ( )
{
  NumberGroupSeparator = "."
};
float f = float.Parse ( "5.34534", nf );
2 голосов
/ 11 декабря 2008

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

float f = float.Parse(input);
string toDb = f.ToString(CultureInfo.InvariantCulture);

А потом с другой стороны:

float f = float.Parse(fromDb, CultureInfo.InvariantCulture);
string toOutput = f.ToString();

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

Я бы также, как видно из приведенных выше фрагментов, рекомендую использовать float.Parse over Convert по разным причинам, но наиболее значимой является возможность использования TryParse:

float f;
if (!float.TryParse(input, out f))
{
    // ERROR
}
0 голосов
/ 11 декабря 2008

Как говорили другие:

Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture);

Вы также должны убедиться, что вы используете InvariantCulture при записи в базу данных. (Было бы еще лучше, если бы вы сохранили данные в столбце с его собственным типом данных, но я отвлекся ...)

...