简化价值(降低数量级和显示)

时间:2016-12-05 16:23:39

标签: vb.net

好的 - 我不是100%肯定这个问题不存在,因为有很多方法可以解决问题。但我认为它不存在(你知道互联网搜索是怎样的)s0请耐心等待。

我正在写一个简短的迷你游戏程序,用于在线课程。它涉及数字“货币”,我已经实施了一个对数“检查”,告诉用户他/她是否有“x”数量的金额。这只是背景。不是问题。

在程序中,他们有以下内容(在主窗体类中)。它在计时器部分,因为完整的程序需要不断更新“钱”

的任何增加
 Dim myFragments As Integer
    Dim FragmentExponent As Double
    Dim myExponent As Double
 FragmentExponent = myFragments
myFragments = 0 'insert whatever value to test 

Private Sub tmrUnknown_Tick(sender As Object, e As EventArgs) Handles tmrUnknown.Tick

lblMoney.Text = myFragments
        myExponent = Math.Log10(FragmentExponent)
        If myExponent < 3 Then lblMoneyMagnitude.Text = " "
        If myExponent >= 3 And myExponent <= 5 Then lblMoneyMagnitude.Text = "Thousand"
        If myExponent >= 6 And myExponent <= 8 Then lblMoneyMagnitude.Text = "Million"
        If myExponent >= 9 And myExponent <= 11 Then lblMoneyMagnitude.Text = "Billion"
        If myExponent >= 12 And myExponent <= 14 Then lblMoneyMagnitude.Text = "Trillion"
        If myExponent >= 15 And myExponent <= 17 Then lblMoneyMagnitude.Text = "Quadrillion"
end sub


                                     ...

你明白了。

但是当我将myMoney值显示给标签时,我仍然拥有原始未修改的文本,以及数量级的表示。 (我知道上面的代码没有解决这个问题,这是一个理解的背景帮助。)

问题:如何修改数据值以仅显示前三位有效数字?

可能只是我,但我正在弄清楚它背后的数学问题。 (并创建新变量/“重新路由”程序运行方式对我来说效果很好,所以不要害怕建议)。

非常感谢您的时间!

2 个答案:

答案 0 :(得分:1)

给定value一些{&#34;幅度&#34;} (或10的力量)是我们知道的myExponent enter image description here

你将这个数字舍入到数百万等,所以你应该围绕指数

lblMoney.Text =  myFragments / (10 ^ Math.Floor(myExponent))

(如果myFragments是我们开始的金额)

答案 1 :(得分:0)

这有用吗:

Private Sub tmrUnknown_Tick(sender As Object, e As EventArgs) Handles tmrUnknown.Tick
    lblMoney.Text = myFragments
    myExponent = Math.Log10(FragmentExponent)

    Select Case True
        Case myExponent < 3
            lblMoneyMagnitude.Text = ""
        Case myExponent < 6
            lblMoneyMagnitude.Text = "Thousand"
        Case myExponent < 9
            lblMoneyMagnitude.Text = "Million"
        Case myExponent < 12
            lblMoneyMagnitude.Text = "Billion"
        Case myExponent < 15
            lblMoneyMagnitude.Text = "Trillion"
        Case myExponent < 18
            lblMoneyMagnitude.Text = "Quadrillion"
        Case Else
            lblMoneyMagnitude.Text = "Too Damn Much"
    End Select

    If Not lblMoneyMagnitude.Text = "" Then
        lblMoney.Text = Int(myMoney / 10 ^ myExponent).ToString
    End If
End Sub