在“ d HH:mm”中将Double转换为

时间:2019-06-25 19:22:09

标签: c# vb.net

我有一个公式,该公式生成一个包含100行4列的表,最后一列返回给我一定的小时数,我希望将此值表示为“ d HH:mm”

我尝试使用Timespan,但不起作用

DT5.Rows.Add(I, Format((100 * LA()) / I, "#,##0.0#"), Format(((I * VPR()) / 100), "#,##0.0#"), (((DM() / ((I * VPR()) / 1000))).ToString("d HH:mm")))

最后一部分((((DM()/((I * VPR())/ 1000)))。ToString(“ d HH:mm”)))应该返回“ d HH:mm”

1 个答案:

答案 0 :(得分:1)

您无法格式化浮点数,并且期望格式化程序弄清楚这是您想要的TimeSpan。因此,您应该从TimeSpan.FromHours(Double)

创建一个TimeSpan

然后,以格式使用空格时,需要对其进行转义。对此进行了注释,但是它使用了C#语法和双反斜杠\\,而您的代码缺少C#行终止符;。我只是猜测并将您的问题视为VB.NET。

您可以转义空格,也可以从TimeSpan的各个属性构建字符串。这两个选项都显示在下面

Dim elapsed = TimeSpan.FromHours(DM() / (I * VPR() / 1000))

Dim formattedTimeSpan = $"{elapsed:d\ h\:mm}"
formattedTimeSpan = $"{elapsed.Days} {elapsed.Hours}:{elapsed.Minutes}"

您还可以使用$ string interpolation

使代码更具可读性
DT5.Rows.Add(
    I,
    $"{100 * LA() / I:#,##0.0#}",
    $"{I * VPR() / 100:#,##0.0#}",
    formattedTimeSpan)

或者如果您仍然喜欢一行,

DT5.Rows.Add(I, $"{100 * LA() / I:#,##0.0#}", $"{I * VPR() / 100:#,##0.0#}", $"{TimeSpan.FromHours(DM() / (I * VPR() / 1000)):d\ h\:mm}")