Sie den Wert einstellen können Sie leicht gerundet sind, zB:
round(trunc(<your number>, 3) - 0.001, 2)
Die trunc(<your number>, 3)
bedeutet, dass alles nach der dritten Dezimalstelle ignoriert wird, so dass 1.3756 genauso behandelt wird wie 1.375. Die - 0.001
passt dann den abgeschnittenen Wert leicht an, so dass das normale Verhalten round()
den Kipppunkt zwischen oben und unten statt auf .x5 auf .x6 erscheinen lässt.
Schnell Demo:
alter session set nls_numeric_characters =',.';
with t (n) as (
select 1.37 from dual
union all select 1.374 from dual
union all select 1.374999 from dual
union all select 1.375 from dual
union all select 1.375001 from dual
union all select 1.3756 from dual
union all select 1.375999 from dual
union all select 1.376 from dual
union all select 1.37999 from dual
)
select n, round(n, 2) as simple, trunc(n, 3) as tmp1, trunc(n, 3) - 0.001 as tmp2,
round(trunc(n, 3) - 0.001, 2) as adjusted
from t;
N SIMPLE TMP1 TMP2 ADJUSTED
---------- ---------- ---------- ---------- ----------
1,37 1,37 1,37 1,369 1,37
1,374 1,37 1,374 1,373 1,37
1,374999 1,37 1,374 1,373 1,37
1,375 1,38 1,375 1,374 1,37
1,375001 1,38 1,375 1,374 1,37
1,3756 1,38 1,375 1,374 1,37
1,375999 1,38 1,375 1,374 1,37
1,376 1,38 1,376 1,375 1,38
1,37999 1,38 1,379 1,378 1,38
Warum wollen Sie 1375 abzurunden [999 ...] * nach unten * auf 1,37, aber 1.376 * bis * 1,38? Das scheint eine ungewöhnliche Anforderung zu sein. –
Vielen Dank für Ihre Antworten an Sie beide! Es war genau die Art von Trick, die ich suchte. Runde (Trunc (, 3) - 0,001, 2) -> Funktioniert perfekt –
Seb63000