Форматирование decimal в decimal с заданной разрядностью
От: Аноним  
Дата: 25.10.06 11:34
Оценка:
Господа!
подскажите, плиз, если не сложно.

Есть число 100.1M, а надо получить 100.100M.
Именно число, а не строку.
Можно конечно в лоб:

            decimal d1 = 100.1M;
            string str = d1.ToString("#######.000");
            decimal d3 = Convert.ToDecimal(str);


Но выглядит как-то не очень изящно

У decimal есть сташный конструктор, содержащий масштаб. Но можно ли его пользовать применительно к данной задаче не понятно.

А вообще задача типовая:
Есть Оракл в таблицах которого содержатся значения типа скажем NUMBER (15,3).
Поэтому если туда сохраняется число 100.1, то достается оно как 100.100.
В результате ЭЦП не сходится.

Заранее спасибо!
Re: Форматирование decimal в decimal с заданной разрядностью
От: Igor Trofimov  
Дата: 25.10.06 17:22
Оценка:
А>Есть число 100.1M, а надо получить 100.100M.
А>Именно число, а не строку.

Че-то вы странное говорите. Это одинаковые decimal'ы.

А>Можно конечно в лоб:

А>
А>            decimal d1 = 100.1M;
А>            string str = d1.ToString("#######.000");
А>            decimal d3 = Convert.ToDecimal(str);  // d1 == d3
А>



А>А вообще задача типовая:

А>Есть Оракл в таблицах которого содержатся значения типа скажем NUMBER (15,3).
А>Поэтому если туда сохраняется число 100.1, то достается оно как 100.100.

Это одинаковые числа. Думается, что все-таки вы где-то со строками работаете, а не с числами.

А>В результате ЭЦП не сходится.


Кошмар!
Re: Форматирование decimal в decimal с заданной разрядностью
От: Аноним  
Дата: 25.10.06 23:38
Оценка:
iamhere, 100.1m и 100.100m — разные числа. Количество знаков после запятой это точность величины.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Форматирование decimal в decimal с заданной разряднос
От: IT Россия linq2db.com
Дата: 26.10.06 03:12
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV>iamhere, 100.1m и 100.100m — разные числа. Количество знаков после запятой это точность величины.


И какое из них больше, а какое меньше?
... << RSDN@Home 1.2.0 alpha rev. 0>>
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 26.10.06 05:29
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Andrej-V, Вы писали:


AV>>iamhere, 100.1m и 100.100m — разные числа. Количество знаков после запятой это точность величины.


IT>И какое из них больше, а какое меньше?


До конца не досказал, сорри. Расходятся ЭЦП на исходный XML и на восстановленный из БД.
То бишь после сериализации в соответствующем поле полученного после восстановления из БД XML вместо 100.1 получаем 100.100

Так можно как-то иначе задать точность для decimal?
Re[4]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 26.10.06 10:39
Оценка:
А>До конца не досказал, сорри. Расходятся ЭЦП на исходный XML и на восстановленный из БД.
А>То бишь после сериализации в соответствующем поле полученного после восстановления из БД XML вместо 100.1 получаем 100.100

А>Так можно как-то иначе задать точность для decimal?


Т.е. цель — удостоверится, что никто в базе мои данные не трогал.
Для этого вычисляется ЭЦП XML-документа перед сохранением, и после извлечения из БД.
И соответственно сравниваются
Re[2]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 26.10.06 10:56
Оценка:
IT, а что больше пакет песка взвешенный на весах с точностью до одной десятой грамма и показавшей вес 100.1 или другой пакет песка, взвешенный на весах с точностью в 100 раз большей, и показавшей 100.100? После измерения любой величины сохраняются все разряды, которые позволяет точность даже если это нули (100.100 в последнем случае). Возможно из-за этого число (decimal) 100.1 и число 100.100 имеют различную структуру в NET.
Я не нахожу среди значков — "цитировать". Не подскажете как это делается (прошу прощения, что в не своей теме и вообще не по теме).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Форматирование decimal в decimal с заданной разряднос
От: GlebZ Россия  
Дата: 26.10.06 12:06
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV>IT, а что больше пакет песка взвешенный на весах с точностью до одной десятой грамма и показавшей вес 100.1 или другой пакет песка, взвешенный на весах с точностью в 100 раз большей, и показавшей 100.100? После измерения любой величины сохраняются все разряды, которые позволяет точность даже если это нули (100.100 в последнем случае). Возможно из-за этого число (decimal) 100.1 и число 100.100 имеют различную структуру в NET.

AV>Я не нахожу среди значков — "цитировать". Не подскажете как это делается (прошу прощения, что в не своей теме и вообще не по теме).
Могу тебе привести другой пример. Число 003 и 3 — эквивалентны. И соответвенно на уровне типизированного значения они равны. А соотвественно при сериализации XML в зависимости от производителя, ты получишь вместо 003 — просто 3.
В decimal нет понятия изменяемой точности. У него точность всегда одинакова. И соотвественно 10.100 и 10.1 — есть один и тот же decimal. А вот если интерпретировать это как строки, то они различны.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Форматирование decimal в decimal с заданной разряднос
От: GlebZ Россия  
Дата: 26.10.06 12:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Т.е. цель — удостоверится, что никто в базе мои данные не трогал.

А>Для этого вычисляется ЭЦП XML-документа перед сохранением, и после извлечения из БД.
А>И соответственно сравниваются
Если тебе нужно чтобы не изменялись значения, перед сохранением сериализуй XML. Но при этом все сериализаторы должны быть одинаковыми(разные сериализаторы от разных производителей могут давать разные результаты). Если вообще не трогалось — отключай схемы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Форматирование decimal в decimal с заданной разряднос
От: Lloyd Россия  
Дата: 26.10.06 12:28
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV>Я не нахожу среди значков — "цитировать". Не подскажете как это делается (прошу прощения, что в не своей теме и вообще не по теме).


Цитировать можно с помощью тега q.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 26.10.06 12:49
Оценка:
Эквивалентных чисел не существует. Бывают эквивалентные уравнения.
Определения уровней (к примеру, типизированного значения) применительно к числу не существует.
Точность к числу не применима. Точность применяется к измеряемой величине.
После измерения число определяет две вещи:
— величину (тоже, что в арифметике и 100.1 равно 100.100);
— точность измерения (и 100.1 говорит о том, что точность измерения была в 100 раз меньше, чем при том измерении ,после которого записали 100.100)
В decimal понятий вообще нет. Понятия (определения) — из других книг.
decimal хранит числа 100.1 и 100.100 по разному.
decimal d = 1.100m;
int[] i= decimal.GetBits(d);



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: Форматирование decimal в decimal с заданной разряднос
От: GlebZ Россия  
Дата: 26.10.06 13:24
Оценка: 2 (1)
Здравствуйте, Andrej-V, Вы писали:

AV>Эквивалентных чисел не существует. Бывают эквивалентные уравнения.

Зависит от угла зрения.
AV>decimal хранит числа 100.1 и 100.100 по разному.
Мало того, 100.1 и 100.100 — это строки. Число — одно и то же.
Но вообще-то я догадываюсь, что выход есть. По крайней мере варианты:
1. В xml ты делаешь схему, и указываешь в схеме xsd:fractionDigits='3'
2. Описываешь его как текст а не число. Возможно даже с xsd:pattern.
Ну и используешь аттрибут XmlTypeAttribute.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 26.10.06 13:51
Оценка:
<q>Цитировать можно с помощью тега q.</q>
Спасибо, не могли объяснить как записать
"Здравствуйте, ник, вы писали". У меня нет такого инструмента в панели "Ответить". Нужно где-то что-то настроить?
Еще раз извените, что не в тему.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: Форматирование decimal в decimal с заданной разряднос
От: Lloyd Россия  
Дата: 26.10.06 14:15
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV><q>Цитировать можно с помощью тега q.</q>

AV>Спасибо, не могли объяснить как записать
AV>"Здравствуйте, ник, вы писали". У меня нет такого инструмента в панели "Ответить". Нужно где-то что-то настроить?
AV>Еще раз извените, что не в тему.

Сорри, не заметил, что ты с gotdotnet-а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Форматирование decimal в decimal с заданной разряднос
От: Igor Trofimov  
Дата: 26.10.06 17:23
Оценка:
А>До конца не досказал, сорри. Расходятся ЭЦП на исходный XML и на восстановленный из БД.

Воот! То есть числа совершенно не при чем. А при чем то, как ты формируешь эти два XML'я.
В двух случаях используются разные форматы представления.

А>Так можно как-то иначе задать точность для decimal?


Точность decimal фиксирована. 100.1m == 100.100m !!! блин, ну проверьте, если такая очевидная вещь не доходит
Re[4]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 26.10.06 22:27
Оценка:
iamhere, cкажите пожалуста, что называется точностью.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[5]: Форматирование decimal в decimal с заданной разряднос
От: shelkovnikov Россия  
Дата: 27.10.06 03:28
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

А>>До конца не досказал, сорри. Расходятся ЭЦП на исходный XML и на восстановленный из БД.


iT>Воот! То есть числа совершенно не при чем. А при чем то, как ты формируешь эти два XML'я.

iT>В двух случаях используются разные форматы представления.

А>>Так можно как-то иначе задать точность для decimal?


iT>Точность decimal фиксирована. 100.1m == 100.100m !!! блин, ну проверьте, если такая очевидная вещь не доходит


Согласен, что в .Net это так, но в БД точность в определении полей/переменных значима настолько, что при неаккуратоном обращении можно полчуть scan индекса вместо seek.
Можно посоветовать перед сохранением введенных только что пользователем данных в xml, выполнить прогон данных через объекты БД.

Re[6]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 27.10.06 08:32
Оценка:
S>
Спасибо за советы, но неужели нельзя проще?
Я считал, что мой вариант избыточен. Но помещать данные в таблицу, а потом их извлекать — это круто

Еще раз. Перед сохранением в БД объект с кучей полей типа decimal сериализуется в XML. Соответственно получаем строку.
От этой строки берется ЭЦП.
При восстановлении объекта из БД проделывается та же процедура. Однако теперь все значения decimal будут приведены к виду
типа 100.100, несмотря на то, что сохранялись как 100.1. А это значит, что полученная строка (XML) будет отличной от той,
которая была ПЕРЕД сохранением в БД,

Доставаться decimal'ы будут так (100.100) всегда. И это правильно.
Значит перед сохранением в БД объект, который будет сериализоваться в XML, от которого будет браться ЭЦП нужно отформатировать так,
чтобы ВСЕ значения decimal были приведены к "правильному" виду 100.100, а не 100.1.

Вот и вопрос, можно ли это сделать более красиво?
Т.е. последовательность следующая:

Объект с полями decimal вида 100.1 -> Объект с полями decimal, переформатированными к виду 100.100 -> Сериалайзер -> строка.


Заранее спасибо
Re[5]: Форматирование decimal в decimal с заданной разряднос
От: Аноним  
Дата: 27.10.06 08:44
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Andrej-V, Вы писали:


AV>>Эквивалентных чисел не существует. Бывают эквивалентные уравнения.

GZ>Зависит от угла зрения.
AV>>decimal хранит числа 100.1 и 100.100 по разному.
GZ>Мало того, 100.1 и 100.100 — это строки. Число — одно и то же.
GZ>Но вообще-то я догадываюсь, что выход есть. По крайней мере варианты:
GZ>1. В xml ты делаешь схему, и указываешь в схеме xsd:fractionDigits='3'
GZ>2. Описываешь его как текст а не число. Возможно даже с xsd:pattern.
GZ>Ну и используешь аттрибут XmlTypeAttribute.

Вот это дело! Спасибо!
При сериализации цеплять схему это гораздо красивей
Осталось только научиться как
Re[7]: Форматирование decimal в decimal с заданной разряднос
От: Igor Trofimov  
Дата: 27.10.06 18:09
Оценка:
А>Еще раз. Перед сохранением в БД объект с кучей полей типа decimal сериализуется в XML. Соответственно получаем строку.
А>При восстановлении объекта из БД проделывается та же процедура. Однако теперь все значения decimal будут приведены к виду
А>типа 100.100, несмотря на то, что сохранялись как 100.1.

Уфф... Можно увидеть код, который делает то и другое? Сериализацию в Xml и зачитывание из БД?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.