|
|
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Всем привет! Подскажите нужно очень срочно: Пр: Есть число 124.125 => хочу округлить до 2-х значащих цифр после запятой Ф-я RoundTo(124.125, -2) дает 124.12 Аналогично RoundTo(124.135, -2) дает 124.13 т.е. 5 всегда округляет в меньшую сторону. Подскажите как сделать чтобы пятерка округляла в большую сторону ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 11:51 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
showMessage(FloatToStr(RoundTo(124.135, -2))); Ответ 124,14 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 11:54 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Мне надо избавится от правила "пятерки", т.е. как сделать чтобы к примеру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:00 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
124.125 давал 124.13 124.135 давал 124.14 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:02 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
используйте SimpleRoundTo вместо RoundTo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:05 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
var vS1, vS2, vS3: double; vStr: string; begin vS1 := 124.125; vS2 := SimpleRoundTo(vS1, -2); vS3 := RoundTo(vS1, -2); showMessage(FloatToStr(vS2)); showMessage(FloatToStr(vS3)); Одинаковый результат : 124.12 (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:11 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Delphi_7var vS1, vS2, vS3: double; vStr: string; begin vS1 := 124.125; vS2 := SimpleRoundTo(vS1, -2); vS3 := RoundTo(vS1, -2); showMessage(FloatToStr(vS2)); showMessage(FloatToStr(vS3)); Одинаковый результат : 124.12 (( может где-то раньше в программе SetRoundMode(rmNearest) встречается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:16 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Castor Delphi_7var vS1, vS2, vS3: double; vStr: string; begin vS1 := 124.125; vS2 := SimpleRoundTo(vS1, -2); vS3 := RoundTo(vS1, -2); showMessage(FloatToStr(vS2)); showMessage(FloatToStr(vS3)); Одинаковый результат : 124.12 (( может где-то раньше в программе SetRoundMode(rmNearest) встречается? хотя это бы влияло только на RoundTo , но не на SimpleRoundTo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:18 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Спасибо! Вылетело из головычто есть SetRoundMode ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:23 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Delphi_7Спасибо! Вылетело из головычто есть SetRoundMode получилось? Изменение с помощью SetRoundMode - не есть решение проблемы. Все будет округляться в одну сторону. Как показал поиск, на некоторых на компах (не знаю - может это какие-то системные настройки влияют) округление всегда идет неверно. Спасает только написание собственной функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 12:31 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
Castor Delphi_7Спасибо! Вылетело из головычто есть SetRoundMode получилось? Изменение с помощью SetRoundMode - не есть решение проблемы. Все будет округляться в одну сторону. Как показал поиск, на некоторых на компах (не знаю - может это какие-то системные настройки влияют) округление всегда идет неверно. Спасает только написание собственной функции полностью согласен. проблема с округлением идёт от св-в FPU. а именно Set8087CW(HEX_VALUE); устанавливает ControlWord FPU, при вызове инструкции FISTP, CW влияет на то, как в типе FLOAT дробная часть будет отделена от целой. А именно, насколько я понимаю со смещением влево, вправо, или без смещения. Отсюда и выводы ... что легче сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 13:11 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
С функцией Round SetRoundMode работает корректно. Вот, может кому пригодится... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2018, 09:56 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
из-за использования SetRoundMod эту функцию RoundToEx нельзя применять в многопоточных приложениях и, кстати, при её завершении хорошим тоном было бы вернуть RoundMod на старое значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2018, 12:35 |
|
||
|
(SOS!!!!) Проблема с округлением
|
|||
|---|---|---|---|
|
#18+
15.11.2018 12:35, Кроик Семён пишет: > из-за использования SetRoundMod эту функцию RoundToEx нельзя применять в многопоточных приложениях у тебя каждый поток округляет по-своему? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2018, 16:06 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=89&tid=2040124]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 326ms |

| 0 / 0 |
