0

みなさんこんにちは: 私は VB.Net にかなり慣れていて、数値を変換し、その数値をその数値に等しい文字列に変換するロジックを理解するのに苦労しています。

例:

     入力 = 1; * を使用して文字列として出力: * (4 つのアスタリスクなど)
     入力 = 3; # を使用した文字列としての出力は、### (など) です。  

教授は、ユーザーから売上金額を取得し、その情報を棒グラフで表示するというこの課題を私たちに与えました。* = 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

それは機能します。出力を実際の入力量として表示する方法がわかりません。どうやってこれを行うのですか?

4

2 に答える 2

1

このような:

strSymbol = New String("*"c, CInt(dblValueA))
于 2012-11-27T21:38:54.227 に答える
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

この関数は、最初の関数と同じ方法で呼び出します。これはまだ文字列コンストラクターのオーバーロードを使用していますが、教授があなたに書いてほしいと思っているループを回避していません。

ここでスタイルのもう1つのポイント。str接頭辞のdbl習慣はどこで身につけましたか? 先生はそう教えたのですか?これはvb6の時代に人気があり、.Netの前の前身です。現在、これは役に立たないと見なされており、Microsoft 独自のスタイル ガイドラインでは、これらのプレフィックスを使用しないことを特に推奨しています。教授があなたの言うことを信じない場合は、このリンクを教えてください:

http://msdn.microsoft.com/en-us/library/ms229045.aspx

于 2012-11-27T21:57:30.447 に答える