Как я могу заменить "," на "." В десятичном или плавающем значении? - PullRequest
0 голосов
/ 26 ноября 2011

У меня проблема с преобразованием типов в C # (VS2010).

Мне нужно вставить несколько строк в базу данных, но тип десятичного числа в C # выглядит следующим образом: 1,34.

В строке sql это выглядит так: "-------- 1,34 ---------", но мне нужно, чтобы эта строка была похожа на: "-------- 1.34 -------».

Как мне заменить " , " на " . ". Спасибо.

Ответы [ 7 ]

18 голосов
/ 26 ноября 2011

Используйте Команды с параметрами , чтобы сгенерировать команду db, и у вас вообще не возникнет таких проблем, и это рекомендуемый способ .Смотрите это, чтобы иметь пример .Вы почти никогда не должны форматировать строку sql самостоятельно, потому что вы всегда будете сталкиваться с проблемами, что если вы перенесете свой sw в другую культуру БД?А как насчет потенциальных инъекций запросов и т. Д.

2 голосов
/ 26 ноября 2011

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

Однако, боюсь, вы думаете, что это десятичное число

"3,14"

Это не так. Это строка, которая содержит десятичное представление, IOW, это визуализация числа для смертных существ.

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

culture.NumberFormat.NumberDecimalSeparator = ".";

Затем используйте этот объект при преобразовании данных.

2 голосов
/ 26 ноября 2011

Просто укажите альтернативную культуру при форматировании числа в строку.

double value = 3.14D;

string formatted = String.Format(CultureInfo.InvariantCulture, "{0:F2}", value);
0 голосов
/ 26 ноября 2011

Смотрите этот предыдущий ответ.

Глобальное форматирование чисел с переполнением стека

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

В базе данных число является только десятичным. Если я пишу приложение здесь, в Великобритании, когда оно преобразуется в строку для отображения, я вижу 9,999,999. Вы пишете приложение, которое видите 9,999,999.

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

0 голосов
/ 26 ноября 2011

Если вы хотите просто вставить данные в базу данных, введите строку с "."(Заменить ( ' ''.'))

0 голосов
/ 26 ноября 2011

Вы можете установить NumberFormatInfo.NumberDecimalSeparator для любой используемой вами CultureInfo:

  // Gets a NumberFormatInfo associated with the en-US culture.
  NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;

  // Displays a value with the default separator (".").
  Int64 myInt = 123456789;
  Console.WriteLine( myInt.ToString( "N", nfi ) );

  // Displays the same value with a blank as the separator.
  nfi.NumberDecimalSeparator = " ";
  Console.WriteLine( myInt.ToString( "N", nfi ) );

Это пример из MSDN

0 голосов
/ 26 ноября 2011

Это зависит не от C #, а от используемой вами культуры по умолчанию.Вам необходимо отформатировать десятичные знаки, используя выбранную вами культуру, см. this для получения справки

...