2015-02-26 5 views
0

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

Я сохраняю цену (только десятичный, а не валютный формат) для SQL db. На компьютерах с Windows 8, если есть десятичное значение, значение будет перемещаться влево и стать десятичным числом .00.

Например:

120,34 станет 12034.00 в базе данных.

120.00 будет в базе данных 120.00.

В Windows 7, однако, мы не сталкиваемся с этой проблемой.

decimal RetailPrice = Convert.ToDecimal(strPriceValue , CultureInfo.InvariantCulture); 
cmd.Parameters.Add("@retail_price", System.Data.SqlDbType.Decimal).Value = RetailPrice; 

Тип столбца sql десятичный (16, 2).

Я хотел бы сохранить десятичное значение как есть, и не нужно менять региональные настройки культуры Windows. Исходное значение всегда будет содержать 2 десятичных пространства и a. десятичный разделитель, который, как я хочу, будет сохранен в базе данных.

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

Update:

Простой бросок и удаление преобразования строки, которые устранили эту проблему:

decimal RetailPrice = (decimal)(ds.Tables[1].Rows[m]["Retail_Price"] as double? ?? 0D); 
+1

У вас есть настройки валюты по двум различным направлениям (от 0,00 до 0,00), ваш SQL видит 0.00 как 000.00, поэтому его логика в том, что он делает. Чистая функция сборки не существует, насколько я знаю, однако с заменой и подстрокой вы могли бы выполнить эту работу. – user3763117

+0

Какова ценность 'strPriceValue' при попытке? Это важно здесь. Это то, что вы сказали «120.34».? –

+0

Значение, например, будет 221872.81 или 175351. Это значение исходит от другого SQL-сервера db, тип данных которого является float. Таким образом, исходное значение является поплатой, значение назначения равно десятичному значению. Я не могу изменить тип с плавающей точкой исходной базы данных. – Deon

ответ

1

Вы говорите, что ваш тип источника данных float (в исходной базе данных SQL). Ваш тип данных назначения должен быть decimal. Для этого вам потребуется конверсия от поплавка до десятичной..

В коде у вас есть строковое значение strPriveValue

Это преобразование из поплавка в строку, которая вызывает ваши проблемы, вы можете избежать этого преобразования полностью.

+0

Не могу поверить, что это было что-то такое глупое. Это очень старый код, над которым мне приходилось работать. Несмотря на то, что все работает отлично под Win8 машины, он работает на Win8 сейчас. Обновлен OP с обновлением исходного кода. благодаря – Deon