|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Почему, посмотрев IL, становится понятно: Код: c# 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.
decimal рожается посредством Decimal Constructor (Int32, Int32, Int32, Boolean, Byte) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
(BTW, decimal.Parse() тоже правильно выставляет scale). И вот, союзно этому scale, Decimal.ToString() Код: c# 1. 2. 3. 4.
и возвращает значение за'PadRight'ченное нулями. Дык к чему это все: можно ли как-то по умному заставить decimal "пересчитать" scale/flag? В контексте setter'а... Учитывая, что Код: c# 1. 2.
Или только посредством чего-то а-ля Код: c# 1.
Можно, конечно, еще заюзать Decimal.GetBits() по умному, анализируя, scale и т.д. и т.п. Но, мо, ЭстЪ что-то более вменяемое? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2015, 23:49 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Ex_SoftИли только посредством чего-то а-ля Код: c# 1.
Нездоровый способ. В итоге две строки и массив символов создадутся и в мусор пойдут. И криво отработает при Код: c# 1.
Пытался порешать этот же вопрос. В итоге перешел на double. У double ToString() без лишних нулей. PS Если нет потребности в точности более 15 десятичных знаков, то double достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 07:56 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Dima TPS Если нет потребности в точности более 15 десятичных знаков, то double достаточно. грабли ждут тебя ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 09:06 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
ИзопропилDima TPS Если нет потребности в точности более 15 десятичных знаков, то double достаточно. грабли ждут тебя Если ты про равенство, то я в курсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 09:32 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
при работе с double равенство вообще лучше не делать, только неравенство по модулю разницы с погрешностью а вообще на работе часто сталкиваемся с этой проблемой, особенно когда данные надо импортнуть из Oracle в MS и обратно, в результате можно такого нагрузить ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 11:24 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Dima TЕсли ты про равенство, то я в курсе. нет, я о накоплении погрешности ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 11:45 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Dima TИзопропилпропущено... грабли ждут тебя Если ты про равенство, то я в курсе. Почитайте внимательно о double и decimal. Double не гаранирует точности после запятой. Там грабли не в точности более 15 десятичных знаков. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 12:01 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Dima TИ криво отработает при Ну дык... Ex_SoftИли только посредством чего-то а-ля Знамо дело, что там поумнее надоть а-ля Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Но это, тем паче на setter'е, еще хуже Dima TНездоровый способ. В итоге две строки и массив символов создадутся и в мусор пойдут. BTW, судя по google не один я был озадачен сим... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 12:05 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
AxeleronПочитайте внимательно о double и decimal. Double не гаранирует точности после запятой. Тогда уж можно заявлять что вообще не гарантирует, т.к. точка там стоит после первого двоичного знака. вики Число двойной точности (Double precision, Double) ... Окончательное значение числа равняется знак * ( 1 +мантисса/ 2^52) * 2^(порядок - 1023) ИМХУ не надо путать с float с которым эти проблемы были актуальны. У double мантисса 52 бита, т.е. максимум 2^52 = 4.5*10^15 вот откуда цифра 15 знаков взялась. И не важно до или после запятой. Первые 15 десятичных знаков будут хранится точно. Точность 100% нужна только в денежном учете (т.е. в рублях). И то только при сложении и вычитании (еще при умножении на целое, но это тоже что и N сложений). Дальше начинаются погрешности из-за округления до копеек. Например: возьми практически любую счет-фактуру из 3-5 строк и проверь что в итого Сумма НДС = Сумма с НДС * Ставка НДС. Не сойдется на копейки. А если сойдется, то сложив построчно Сумму НДС не сойдется с итого Сумма НДС. Т.е. как только начинается деление (или умножение на дробное) то об абсолютной точности можно забыть. decimal не спасет от округлений при выводе. Изопропилнет, я о накоплении погрешности Это надо много-много точных действий (сложение и вычитание) сделать чтобы погрешность исказила хотя бы на копейку результат в рублях. Или результат должен быть 15 знаков. Например сложить все входящие платежи в Сбербанк за год. Если грубо прикинуть, кол-во операций не менее 10^(16 - макс.разрядность), т.е. например для получении ошибки при сложении до миллиарда надо сложить минимум 100000 значений. Ситуация конечно возможная, но очень редкая. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 13:07 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Ex_SoftЗнамо дело, что там поумнее надоть а-ля Код: c# 1. 2. 3. 4. 5.
ИМХУ лучше так Код: c# 1.
Это же для вывода надо. Чего там у decimal внутри в остальных случаях фиолетово. Так будет сгенерена только одна строка, и там где это надо, т.е. пойдет дальнейшую работу, а не сразу в мусор. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 13:23 |
|
decimal.ToString() trim trailing zeros
|
|||
---|---|---|---|
#18+
Dima TИМХУ лучше так Код: c# 1.
Это же для вывода надо. Чего там у decimal внутри в остальных случаях фиолетово. Так будет сгенерена только одна строка, и там где это надо, т.е. пойдет дальнейшую работу, а не сразу в мусор. Дык в том-то и засада, что этот Decimal.ToString() юзают далее везде применительно к моей decimal property. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 14:29 |
|
|
start [/forum/topic.php?fid=20&msg=39124968&tid=1400980]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 134ms |
0 / 0 |