【发布时间】:2018-09-27 16:52:21
【问题描述】:
我正在尝试转换小数小时时差,但总是四舍五入导致问题。
declare @Accrued decimal(9,4) = 24.60
declare @Used decimal(9,4) = 23.5734
declare @Remaining decimal(9,2) = @Accrued - @Used
declare @RoundAccrued decimal(9,2) = ceiling(@Accrued * 100) / 100
declare @RoundUsed decimal(9,2) = ceiling(@Used * 100) / 100
declare @RoundRemaining decimal(9,2) = ceiling(@Remaining * 100) / 100
declare @hrAcc int = @Accrued
select left(cast (@hrAcc as varchar), 4) + '.' + right('0' + cast((floor((@RoundAccrued * 60) % 60)) as varchar), 2) Accrued
declare @hrUsed int = @Used
select left(cast (@hrUsed as varchar), 4) + '.' + right('0' + cast((floor((@RoundUsed * 60) % 60)) as varchar), 2) Used
declare @hrRem int = @Remaining
select left(cast (@hrRem as varchar), 4) + '.' + right('0' + cast((floor((@RoundRemaining * 60) % 60)) as varchar), 2) Remaining
结果
- 应计:24.36
- 使用时间:23.34
- 剩余:1.01(而不是 1.02)
它在Accrued 和Used 上完美运行,但无论我做什么,它仍然比不同的时间短一分钟或更多。
【问题讨论】:
标签: sql sql-server time decimal