Узнать сколько знаков после запятой в числе? Visual Basic
Есть ли какая-нибудь функция в VB, которая бы определяла кол-во знаков после запятой?
Т.е например получили число 1,4445 и эта функция определяет, что после запятой 4 знака.
Вопрос к тому, что никак не получается сделать Арифметическое округление в VB. Прочёл уже всё что можно и нельзя... и round и не round и +0,5 к числу и тд... никак не идёт...
т.е если число 1,445 и мы округляем до сотых, то получим = 1,45
а вот если уже число 1,4445 и опять до сотых хотим округлить, то получим уже 1,44
Все статьи сводятся к тому, что уже известно число и мы легко можем подогнать прибавив определенный десяток для правильного округления... а вот если не известно, число... беда
А что вам не нравится?
Округление до сотых 1.445->1.45, 1.4445->1.44 - именно так и должно быть при АРИФМЕТИЧЕСКОМ округлении.
А вот если по Гауссу, то 1.445->1.44 - до четного в последнем разряде, если в следующем 5
Но, в любом случае остальные разряды НЕ РАССМАТРИВАЮТСЯ
Подсчет знаков после запятой (S - исходное число, D - кол-о десятичных знаков) :
1. Если после запятой НЕ 0, то очень просто D = Len(Str(Abs(S - Fix(S)))) - 2
2. Если 0 или число в текстовом виде представлено экспоненциальной записью x.xxxE+-yy, то только анализом строки, например, так
Dim pE As Long
pE = InStr(1, S, "E")
If pE > 0 Then
D = pE - InStr(1, Str(S), ".") + 1
Else
D = Len(Str(S)) - InStr(1, Str(S), ".")
End If
если ты хочешь просто округлить, то сделай так:
....=chislo (chislo тебе надо округлить)
new_chislo=(chislo+0.5) \ 1 (слеш в другую сторону напривлен - делит нацело)
Range("a1")=new_chislo (New_chislo - число которое округлено до целого)
Если хочешь округлить до сотых, то сначало умнож chislo на 100, а потом new_chislo раздели на 100
А оператор поиска есть, но он может просто посчтитать сколько запятых в строке (других не помню уже)
не силен в VB но например в паскале или в СИ можно просто разбить число на массив символов, потом проверить необходимую цифру после запятой, увеличить или уменьшить, потом удалить все цифры после того числа - т. е. округлить и перевести число обратно из массива в дробь.
ах да для определения длины дроби использ ф-ю длина массива и вычитаешь из нее дляну целой части+1 (запятая)