大家好:我在VB.Net上很绿,而且我很难理解转换数字的逻辑,然后将该数字转换成等于该数字的字符串。
示例:
Input = 1; Output as string using * is: * (4 asterisks, and etc.) Input = 3; Output as string using # is: ### (and so on).
教授给了我们这项任务,以便从用户那里获得销售额,然后显示一种带有信息的条形图。 * = 100美元。因此,600美元等于 ** 。我可以得到这些信息,但我对如何转换这个信息很感兴趣。希望我把这个清楚地说成一个好问题!这就是我正在做的事情......已经有了获取信息的循环:
' The variables
Dim dblValueA, dblSales, dblTotal As Double
Dim dblValueB As Double = 1
Dim strInput, strChgVal As String
Dim strSymbol As String = "*"
Dim strOutput As String
' get some input via a loop structure:
Try
For intCount As Integer = 1 to 5 ' Sales/Input for 5 Stores
strInput = InputBox("place input here:")
dblSales = CInt(strInput)
dblTotal = dblSales
dblValueA = (dblTotal/dblValueB)
strChgVal = Cstr(dblValueA)
strOutput = strChgVal
strSymbol = strOutput
lstOutput.Items.Add(dblValueA.ToString)
Next
Catch ex As Exception
End Try
它有效,我只是迷失了如何将输出显示为实际的输入量。怎么做到这一点?
答案 0 :(得分:1)
像这样:
strSymbol = New String("*"c, CInt(dblValueA))
答案 1 :(得分:0)
我非常喜欢使用字符串构造函数重载,如@David's answer中所述。但是,根据我的评论,我会添加这样的代码:
Public Function ToTextBars(ByVal input As Decimal, ByVal marginalValue As Decimal, ByVal BarCharacter As Char) As String
'Always use a Decimal, not Double or Integer, when working with money
Return New String(BarCharacter, CInt(CDec(dblValueA)/marginalValue))
End Function
它仍然是单行的:)然后像这样称呼它:
Console.WriteLine(ToTextBars(600d, 100d, "*"c))
或者像这样:
Dim result As String = ToTextBars(3d, 1d, "#"c)
结果将是:
******
但是,我怀疑在这里写一个循环是作业目标的一部分。使用字符串重载会忽略这一点。在那种情况下,我会这样写:
Public Function ToTextBars(ByVal input As Decimal, ByVal marginalValue As Decimal, ByVal BarCharacter As Char) As String
If input < 0 Then input *= -1
Dim charCount As Integer = 0
While input > 0
charCount += 1
input -= marginalValue
End While
Return New String(BarCharacter, charCount)
End While
您可以像第一个一样调用此函数。这仍然使用字符串构造函数重载,但它不会避免我希望你的教授想要你编写的循环。
这里还有一点风格。您从哪里获取str
和dbl
前缀习惯?你的教授教你这个吗?这曾经在vb6时代流行,而它的前身是在.Net之前。现在,这不再被认为是有用的,微软自己的风格指南特别建议不要使用这些前缀。如果他不相信你,请将你的教授指向这个链接: