在VB.NET中创建字符串时保持小数

时间:2012-08-22 15:23:09

标签: vb.net

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

例如:

如果我在变量中得到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,那么它可以工作,我得到“0001234.1” 如果我发送1然后我想得到“001” 如果我发送90然后我想得到“090” 如果我发送日期,我想得到“08/21/2012” 如果我发送一个字符串,我想得到“NAME”

当小数为零时,有人可以帮助如何保存小数?

3 个答案:

答案 0 :(得分:2)

如果小数点的数量发生变化,你将不得不实现更精细的内容,但如果你可以使用两个小数点,这将有效:

           stringField = CDbl(field).ToString("0.00").PadLeft(size, "0")

答案 1 :(得分: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

答案 2 :(得分:0)

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