是否可以在 VB Net 中的 Double Var 中添加 0

Is it possible to Add 0 in Double Var in VB Net

我想在每个数字前加 0,但它似乎不起作用,因为我使用的是双精度数字。我使用的是 double,因此我可以输入 1.5(小时)等数字并将其转换为秒、分钟和小时(输出应为 0 秒、30 分钟和 1 小时以及 01:30:00)。我对第一个输出没有问题,但我似乎无法执行第二个输出(所需的 01:30:00 仅显示 1:30:0)。我首先做的是尝试将 double 变量转换为 int32,然后再转换为字符串,但它似乎不起作用。这是代码:

    If SecondsRemainder >= 0 And SecondsRemainder < 10 Then
            SecondsRemainder = Convert.ToInt32(SecondsRemainder)
            SecondsRemainder.ToString.PadLeft(2, "0")
    End If

这行代码:

    SecondsRemainder.ToString.PadLeft(2, "0")

似乎什么也没做,我是不是漏掉了什么?或者我还有其他办法吗?期待您的回答!

让我们逐条查看这一行,看看它实际做了什么:

SecondsRemainder.ToString.PadLeft(2, "0")

我们从 SecondsRemainder 变量开始。这个变量仍然是 Double,尽管之前的代码使用了 Convert.ToInt32()。请记住,它的核心 VB.Net 是一种静态类型的语言!当您声明一个具有特定类型的变量时,该变量的类型永远不会改变

我们现在为该变量调用 .ToString() 方法。请注意,这确实是一种方法,而不是 属性。 .Net 的良好做法是在调用方法时包含括号,即使 VB 并不严格要求它们。如果我查看该代码,我会要求您更改它以显示括号。请记住,我们还获得了此方法的 Double 版本,而不是 Integer 版本。你在这里可能没问题,但双精度版本可以做一些奇怪的事情来格式化你可能对整数不期望的事情。

最后,我们从前面的方法中取出字符串结果并调用PadLeft()。这主要是做你所期望的。但是,没有采用数字和字符串的重载。坦率地说,我很惊讶这甚至可以编译,它告诉我你可能没有正确设置 Option Strict。没有 self-respecting 程序员在 Option Strict Off 下运行了。这个函数的正确调用方式是这样的:

.PadLeft(2, "0"c)

其中 c 后缀为您提供字符值而不是字符串值。

就是这样。我们完成了。这个函数returns一个结果。它不会修改调用变量。所以我们已经完成了所有这些工作,并在没有实际更改任何内容的情况下丢弃结果。

要解决您的问题,我会做的是声明一个新的 string 变量来接收结果。然后我将使用此代码分配给它:

'Create a string variable to hold your string result
Dim RemainderString As String = ""
'Use double literals to compare with double variables!
If SecondsRemainder >= 0.0 And SecondsRemainder < 10.0 Then 
    'Use a format string directly from the initial double value to create your string result
    ' and don't forget to assign it to a variable
    RemainerString = SecondsRemainder.ToString("00") 
End If

您可能还想先使用 Math.Round(),因为此代码仍会根据 1.9999 输入创建 "01"

最后,我想知道您如何使用这个 SecondsRemainder 值。 VB.Net 有一整套用于构建日期和时间字符串和值的方法,并且像 SecondsRemainder 这样的变量名称听起来像是你在做一些困难的事情,可能 MUCH 更容易。

我想知道答案是否是您处理问题的方式不正确。你似乎在计算一些时间价值。如果是这样,请使用 TimeSpan。

    Dim ts As TimeSpan = TimeSpan.FromHours(1.51#)
    ' ts.TotalSeconds
    ' ts.Seconds
    Dim s As String = ts.ToString("hh\:mm\:ss")