【问题标题】:Increment the last digit of a number递增数字的最后一位
【发布时间】:2014-01-21 19:55:47
【问题描述】:

VB2010 我有一个用户输入数字格式的用户表单。然后该例程循环遍历数字对列表并将它们显示在类别列表中:

 User format "0.00"
                            0.00 - 164.04
                            164.04 - 410.10
                            410.10 - 820.21

我想要做的是将第一个值增加一个数字,这样就没有重叠。类似:

                            0.00 - 164.04
                            164.05 - 410.10
                            410.11 - 820.21

我正在尝试使它适用于用户输入的任何数字格式,例如“0.000”或“0.0”。我目前拥有的是(值 164.04 的示例)

1. Convert the value to a string "164.04"
2. Take the right most character "4" and convert to an integer 4
3. Increment the integer value by 1 to get 5
4. Take the characters in the string from step #1 except the last and then append
   the integer from Step #3 as a string to get "164.05".

似乎可以在我的 VB6 程序中工作,但想看看是否有人有更好的想法。我也不认为我把最后一位数字解释为 9。

更新:根据以下建议,最终适用于正数和负数以及整数和浮点数的建议如下:

Dim p As Integer
Dim numAsStr As String = num.ToString(fmt)
If numAsStr.IndexOf(".") = -1 Then
    p = 0
Else
    p = numAsStr.Length - numAsStr.IndexOf(".") - 1
End If
Dim result as Double = ((num* (10 ^ p) + 1.0) / (10 ^ p))

【问题讨论】:

  • 使用 numericupdown 并将系列 2 的最小值设置为比系列 1 的最大值大 0.01,以此类推
  • 格式是用户输入的,所以它可以是从“0.0”到“0.000000”的任何值。

标签: vb.net numbers format increment significant-digits


【解决方案1】:

算法如下:

1.查找小数点(p)

2.将数字乘以10^p,加一,再除以10^p

Dim numAsStr As String = num.ToString()
Dim p As Integer = numAsStr.Length - numAsStr.IndexOf(".") - 1
Dim numInt as Integer = 10^p * num
Dim result as Double = ((10^p *num + 1.0) / 10^p).ToString()

【讨论】:

  • 好的,现在正在测试。它适用于一些调整。在 Dim numAsStr As String = num.ToString("0.000") 中添加预期格式或任何可能的格式很重要。
  • 也可以处理“0”或“0”的格式。结果是一个整数,我分为两种情况。 If numAsStr.IndexOf(".") = -1 Then Dim result As Double = minVal + 1 然后另一种情况就像你写的那样。
  • @sinDizzy 请查看编辑后的答案。它已完全更新。
  • 好的,让我看看,但这不只是省略像“0.000”这样的格式。
  • 在将其转换为字符串时需要注意格式,例如Console.WriteLine(result.ToString("0.000"))
【解决方案2】:

对这个问题使用“ON ERROR RESUME NEXT”结构。

【讨论】:

  • 那只会忽略错误。为什么在 .NET 提供 try/catch 块以更好地处理错误时使用它?
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2020-12-23
  • 2017-03-08
  • 2018-12-02
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多