如何在VB.NET中让小数仅以.0或.5结尾?
VB.NET 时长数值按规则取整的实现
你可以通过以下方式修改calcDuration函数,实现对时长数值的自定义取整逻辑:
Private Sub calcDuration() Dim startTime As DateTime = Convert.ToDateTime(timeFromPicker.Text) Dim endTime As DateTime = Convert.ToDateTime(timeToPicker.Text) Dim span As TimeSpan = endTime.Subtract(startTime) Dim durationTot As Decimal = CDec(span.TotalHours) ' 处理小数部分,按规则取整 Dim integerPart As Decimal = Math.Floor(durationTot) Dim decimalPart As Decimal = durationTot - integerPart Dim adjustedDuration As Decimal If decimalPart < 0.5D Then adjustedDuration = integerPart ' 小数部分小于0.5,转为.0结尾 ElseIf decimalPart > 0.5D Then adjustedDuration = integerPart + 0.5D ' 小数部分大于0.5,转为.5结尾 Else adjustedDuration = durationTot ' 小数部分等于0.5,保持原数值 End If lblHiddenOTDuration.Text = adjustedDuration.ToString("N1") End Sub
逻辑说明
- 拆分时长的整数与小数部分:通过
Math.Floor提取整数部分,原数值减去整数部分得到小数部分 - 根据小数部分的范围调整数值:
- 小数部分小于0.5时,直接取整数部分,结果以
.0结尾 - 小数部分大于0.5时,整数部分加0.5,结果以
.5结尾 - 小数部分等于0.5时,保留原数值(若需特殊处理,可自行修改分支逻辑)
- 小数部分小于0.5时,直接取整数部分,结果以
另外,将span.TotalHours转换为Decimal时,使用CDec更符合VB.NET的类型转换规范,能避免隐式转换可能带来的问题。
内容的提问来源于stack exchange,提问作者Una O Lian
相关产品推荐
相关产品推荐

