Вот один из способов:
Dim value As Integer = 123
Dim num As Decimal = value
While Math.Abs(num) >= 1
num = num / 10
End While
Math.Abs заботится о негативе, поэтому вы можете удалить его, если говорите, что вас это не касается.
Это также работает :
Dim value as Integer = 123
Dim num as Decimal = value
num /= 10 ^ Math.Ceiling(Math.Log10(value))
Сначала немного сложнее увидеть, что происходит, но в основном он находит следующую степень 10, которая выше числа, и делит на 10 ^ (эту степень)
Edit Согласно ответу Крейгса Math.Floor, затем добавить один работает лучше, чем Math.Ceiling, таким образом:
Dim value as Integer = 123
Dim num as Decimal = value
num /= 10 ^ (Math.Floor(Math.Log10(value)) + 1)
Edit Я только что провел быстрое сравнение производительности , а на моем P C выполнение While l oop заняло 851 мс, а метод Log10 - 158 мс. Это для 1000000 итераций каждого.