Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
Ситуация: в клиентской программе на дельфи (RAD Studio 2010) нужно отображать значения типа decimal(31, 15), полностью отображая все знаки после запятой (все 15). Как выяснилось, сделать это, передавая на клиент значения как есть (именно decimal(31,15)) невозможно: при отключенной опции EnableBCD значения передаются как double, и ряд значений при заданной маске отображения 15 знаков приобретают в дробной части хвост, которого на самом деле нет - видимо, это связано с потерей точности при прееобразовании в double по IEEE-754. Если включить опцию EnableBCD, значения передаются как binary-coded decimal (собственно, BCD), но обычный BCD (TBCDField) производит округление до формата currency (до 3 знаков), что неприемлемо. А значения типа TFMTBCD (TFMTBСDField), где округление не производится, используемая версия библиотеки доступа к данным (DevArt SDAC) не поддерживает. Ввиду всего вышеизложенного было принято решение форматировать decimal(31,15) в varchar на сервере. Требования: 15 знаков после запятой, разделитель дробной и целой частей запятая, разделитель разрядов целой части пробел. Сервер - 2005-й. Была написана вот такая функция: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Вроде бы работает вполне нормально, но, может, здесь можно что-то подкрутить в плане лаконичности, быстродействия, итд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2018, 08:10 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
WinterGraveyard, Прошу прощения за небольшой оффтопик(тк без анализа ф-ции), не проще ли просто 2-мя int-ами отдать (целая и дробная часть) и форматировать все же на клиенте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2018, 14:03 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
iiyamaWinterGraveyard, Прошу прощения за небольшой оффтопик(тк без анализа ф-ции), не проще ли просто 2-мя int-ами отдать (целая и дробная часть) и форматировать все же на клиенте?Простым intом не получится - у него не более 10 знаков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2018, 15:22 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
WinterGraveyard, я бы написал CLR функцию для таких целей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2018, 16:10 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
WinterGraveyardформатировать decimal(31,15) в varchar на сервере. Требования: 15 знаков после запятой, разделитель дробной и целой частей запятая, разделитель разрядов целой части пробел. Сервер - 2005-й. если вдруг окажется сервер 2012 :) Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2018, 16:12 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
WinterGraveyard, Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2018, 04:50 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
Massa52WinterGraveyard, Код: sql 1. 2. Нет, спасибо, передавать клиенту два значения вместо одного, и потом собирать из них одно в средствах отображения (DevExpress QuantunGrid/FastReports) - это намного больше возни, чем отформатировать значение на сервере (к тому же выборки в контексте данной задачи небольшие, и вряд ли такие преобразования сильно нагрузят сервер). Владислав КолосовWinterGraveyard, я бы написал CLR функцию для таких целей. Отпадает - по каким-то причинам администраторы не хотят возиться с хостингом CLR-сборок на сервере. Shakillесли вдруг окажется сервер 2012 :) Да, спасибо, я в курсе, но есть только то, что есть. И насколько я понимаю вот это авторFORMAT relies on the presence of the .NET Framework Common Language Runtime (CLR). эта функция и является оберткой над дотнетовским форматированием (и использует дотнетовские форматы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2018, 08:07 |
|
||
|
Форматирование decimal(31, 15) в строку на стороне сервера
|
|||
|---|---|---|---|
|
#18+
WinterGraveyard, Практический вопрос: судя по тому, что вы разделяете разряды пробелом, это число требуется просто для отображения? Может проще его передавать строкой в клиент и там уже как строку форматировать? Сдается мне на Дельфи это гораздо короче получится (не уверен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2018, 08:34 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39717915&tid=1688966]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 373ms |

| 0 / 0 |
