我需要一起创建一个包含各种变量的字符串,我需要用前导零填充它。如果小数点后的值为零,我还需要保留小数。 如果变量只是零,那么我想完全压制它并用空格填充
例如:
如果我在变量中得到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”
当小数为零时,有人可以帮助如何保存小数?
答案 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所说,如果你把它作为一个字符串传递你就可以了。如果你将它作为整数传递,它将被推断为整数,而不是字符串。那不是你想要的。