あなたは少し丸めている値を調整することができ、例:
round(trunc(<your number>, 3) - 0.001, 2)
trunc(<your number>, 3)
は、3番目の10進数の後のすべてが無視されることを意味します。したがって、1,3756は1,375と同じように扱われます。 - 0.001
は、通常のround()
の動作により、上下の切り替えポイントが.x5ではなく.x6になるように、切り捨てられた値をわずかに調整します。
クイックデモ:
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
なぜあなたは1.37に1375 [999 ...] *ダウン*を四捨五入したいのですが、1.376 *は1.38まで*でしょうか?それは珍しい要求のようです。 –
皆さんのお返事ありがとうございました! これはまさに私が探していた種類のトリックでした。 ラウンド(trunc(、3) - 0.001,2) - >完全に動作します –
Seb63000