String.Format 的整数在 VB.Net 中不正确
String.Format for Integer is Incorrect in VB.Net
这不应该发生,所以我一定是漏掉了一些简单的东西。
在下面的 VB 函数中,我尝试使用以下格式语句生成要在屏幕上显示的部件号列表:
ticket = String.Format("{0:000}-{1:00000}-{2:00}", storeNumber, order, release)
因此,ticket 的格式应为 xxx-yyyyy-zz
,以便票证是人类可读的,并且我的应用程序的其他部分可以解析此数据。
Public Shared Function GetShipTickets(storeNumber As Integer, auditor As String, startDate As DateTime) As ShipTickets
Dim list As New ShipTickets(auditor)
list.Display = String.Format("Since {0:MMMM d}.", startDate)
Const sqlCmd As String =
"SELECT TICKET_STORE, TICKET_ORDER, TICKET_RELEASE " &
"FROM TBLRELHDR " &
"WHERE TICKET_STORE=@TICKET_STORE AND STATUS='C' AND @CREATE_DATE<=CREATE_DATE " &
"ORDER BY TICKET_ORDER, TICKET_RELEASE, CREATE_DATE; "
Dim table As New DataTable()
Using cmd As New DB2Command(sqlCmd, Db2CusDta)
cmd.Parameters.Add("TICKET_STORE", DB2Type.SmallInt).Value = storeNumber
cmd.Parameters.Add("CREATE_DATE", DB2Type.Char, 8).Value = String.Format("{0:yyyyMMdd}", startDate)
table.Load(cmd.ExecuteReader())
End Using
If 0 < table.Rows.Count Then
For Each row As DataRow In table.Rows
Dim order As String = String.Format("{0}", row("TICKET_ORDER")).Trim().ToUpper()
Dim release As String = String.Format("{0}", row("TICKET_RELEASE")).Trim().ToUpper()
Dim ticket As String = String.Format("{0:000}-{1:00000}-{2:00}", storeNumber, order, release)
list.Add(ticket)
Next
End If
list.Sort()
Return list
End Function
虽然它不起作用。
此外,当我在屏幕上查看我的数据时,它也无法正确显示:
这是怎么回事?
VB 不是我最强的编程语言。 VB 有一些我不知道的细微差别,或者编译器搞砸了。
使用 Visual Studio 2012
格式“{2:00}”适用于整数,不适用于字符串。它不会自动将由数字组成的字符串转换为整数。手动将字符串转换为整数:
Dim ticket As String = String.Format("{0:000}-{1:00000}-{2:00}",
CInt(storeNumber),
CInt(order),
CInt(release))
这不应该发生,所以我一定是漏掉了一些简单的东西。
在下面的 VB 函数中,我尝试使用以下格式语句生成要在屏幕上显示的部件号列表:
ticket = String.Format("{0:000}-{1:00000}-{2:00}", storeNumber, order, release)
因此,ticket 的格式应为 xxx-yyyyy-zz
,以便票证是人类可读的,并且我的应用程序的其他部分可以解析此数据。
Public Shared Function GetShipTickets(storeNumber As Integer, auditor As String, startDate As DateTime) As ShipTickets
Dim list As New ShipTickets(auditor)
list.Display = String.Format("Since {0:MMMM d}.", startDate)
Const sqlCmd As String =
"SELECT TICKET_STORE, TICKET_ORDER, TICKET_RELEASE " &
"FROM TBLRELHDR " &
"WHERE TICKET_STORE=@TICKET_STORE AND STATUS='C' AND @CREATE_DATE<=CREATE_DATE " &
"ORDER BY TICKET_ORDER, TICKET_RELEASE, CREATE_DATE; "
Dim table As New DataTable()
Using cmd As New DB2Command(sqlCmd, Db2CusDta)
cmd.Parameters.Add("TICKET_STORE", DB2Type.SmallInt).Value = storeNumber
cmd.Parameters.Add("CREATE_DATE", DB2Type.Char, 8).Value = String.Format("{0:yyyyMMdd}", startDate)
table.Load(cmd.ExecuteReader())
End Using
If 0 < table.Rows.Count Then
For Each row As DataRow In table.Rows
Dim order As String = String.Format("{0}", row("TICKET_ORDER")).Trim().ToUpper()
Dim release As String = String.Format("{0}", row("TICKET_RELEASE")).Trim().ToUpper()
Dim ticket As String = String.Format("{0:000}-{1:00000}-{2:00}", storeNumber, order, release)
list.Add(ticket)
Next
End If
list.Sort()
Return list
End Function
虽然它不起作用。
此外,当我在屏幕上查看我的数据时,它也无法正确显示:
这是怎么回事?
VB 不是我最强的编程语言。 VB 有一些我不知道的细微差别,或者编译器搞砸了。
使用 Visual Studio 2012
格式“{2:00}”适用于整数,不适用于字符串。它不会自动将由数字组成的字符串转换为整数。手动将字符串转换为整数:
Dim ticket As String = String.Format("{0:000}-{1:00000}-{2:00}",
CInt(storeNumber),
CInt(order),
CInt(release))