0

我需要一起创建一个各种变量的字符串,我需要用前导零填充它,如果小数点后的值为零,我还需要保留小数点。如果变量只是零,那么我想完全抑制它并用空格填充

例如:

如果我在变量中得到 0 并且它的大小是 3,我希望字符串是:“” 如果我在变量中得到 9 并且它的大小是 3,那么我想要字符串:“009”如果我在变量中得到 90.0 它是大小是 10,然后我想要字符串:“00000090.0”

我正在尝试使用:

public function PadField(byval field as object, byval size as int16) as string

   dim fieldstring as string = string.empty
   dim fieldDate as date

   '  here I want to check for a numeric variable
   if isnumeric(field) then

      '  if the variable is an integer with a value of zero...
      if cint(field) = 0 then
         stringField = string.empty.padleft(size,"0")

      '  else if the variable is an integer greater than zero...
      elseif cint(field) > 0 then
         stringField = field.toString.padLeft(size,"0")
      End If

   ' else if a date, I want date to look like MM/dd/yyyy...
   elseif IsDate(field) then
      fieldDate = field
      strigField = fieldDate.ToString("MM/dd/yyyy")

   '  else if a string, then I want to pad after with spaces
   else
      stringField = field.ToString.Trim.toUpper.PadRight(size," ")
   End If

   return stringField

end Function

问题是当我传入一个像 1234.0 这样的变量时,我得到以下结果:

"0001234"    

但我想要:

"0001234.0"

如果我发送 1234.1,那么它可以工作,如果我发送 1,我会得到“0001234.1”,如果我发送 90,我想得到“001”,如果我发送日期,我想得到“090”,我想要如果我发送一个字符串来获得“08/21/2012”,我想获得“NAME”

当小数为零时,任何人都可以帮助如何保留小数吗?

4

3 回答 3

2

如果小数点的数量发生变化,您将不得不实现更复杂的东西,但如果您可以使用两个小数点,这将起作用:

           stringField = CDbl(field).ToString("0.00").PadLeft(size, "0")
于 2012-08-22T17:10:04.023 回答
1

我无法重现该行为,您的字符串是否有可能在某处被转换为数字数据类型?如果我将“123.0”传递给下面的例程,我会得到 00000123.0。在我看来,问题出在其他地方。

Public Sub test(o As Object)
    If IsNumeric(o) Then
        If (CInt(o)) > 0 Then
            MessageBox.Show(o.ToString.PadLeft(10, CChar("0")))
        End If
    End If

End Sub
于 2012-08-22T16:44:17.397 回答
0

正如 PatFromCanada 所说,如果你将它作为字符串传递,你就可以了。如果您将它作为整数传递,它将被推断为整数,而不是字符串。这不是你想要的。

于 2012-08-22T18:13:45.780 回答