Поздрави добри хора от интернет :)
Имам стойност на низ "1,5", която след Convert.ToDecimal() завършва като 1,5M, когато я гледам в програмата за отстраняване на грешки. Дотук добре предполагам. След това десетичната стойност се предава на извикване на съхранена процедура в набор от данни. Типът параметър, който ме интересува, е дефиниран като NUMBER (7,2) в DB, така че трябва да позволява числа, които имат цифри след десетичния разделител.
Проблемът е, че някъде по линията десетичната стойност губи своя разделител и се присъединява към точността с мащаба, създавайки напълно ново число, както е посочено в заглавието на тази публикация. Дори се опитах да настроя Precision и Scale вътре в колекцията от параметри в това извикване на съхранена процедура, за да съответства на DB (7,2), но и това не помогна.
Имате ли представа какво може да се случва тук?
РЕДАКТИРАНЕ:
Ето кода, който извиква съхранената процедура:
CaseFactory.UtilsAdapter.SetCaseAction(DefId, action, doneBy, assignedTo, comment, status,
searchStatus, priority, access, relStatus, relStatusFixKit, totalhrs,
out Common.RETURN_CODE, out Common.RETURN_TEXT);
=> SetCaseAction просто извиква съхранена процедура в DB, използвайки механиката на DataSet. 'totalhrs' е параметърът, който ме интересува, в този момент е десетичен знак 1,5M. Също така проверих NLS_NUMERIC_CHARACTERS в Oracle и те са зададени на ', '
Така че използва запетая за десетични знаци и интервал за хиляди. Нищо необичайно не виждам там. Единственото странно нещо може да е, че '1,5' завършва като '1.5M' с точка вътре след ToDecimal(), което може да се тълкува неправилно. Изглежда обаче малко вероятно, тъй като регионалните настройки на моя сървър също използват ',' като десетичен разделител, освен ако .NET не използва някои различни настройки? Наистина объркан.