Десятичные знаки в числе в VB.NET - PullRequest
4 голосов
/ 30 октября 2011

Как проверить, сколько десятичных разрядов у числа в VB.NET?

Например: внутри цикла у меня есть оператор if, и в этом операторе я хочу проверить, имеет ли число четыре десятичных знака (8,9659).

Ответы [ 6 ]

5 голосов
/ 30 октября 2011
Dim numberAsString As String = myNumber.ToString()
Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".")
Dim numberOfDecimals As Integer = _
    numberAsString.Substring(indexOfDecimalPoint + 1).Length
4 голосов
/ 06 июня 2014

Аналогичный подход, который учитывает целочисленные значения.

Public Function NumberOfDecimalPlaces(ByVal number As Double) As Integer
    Dim numberAsString As String = number.ToString()
    Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".")

    If indexOfDecimalPoint = -1 Then ' No decimal point in number
        Return 0
    Else
        Return numberAsString.Substring(indexOfDecimalPoint + 1).Length
    End If

End Function
2 голосов
/ 08 октября 2014
  Public Shared Function IsInSignificantDigits(val As Double, sigDigits As Integer)
    Dim intVal As Double = val * 10 ^ sigDigits
    Return intVal = Int(intVal)
   End Function
0 голосов
/ 21 февраля 2019

Простой ... где n - количество цифр

Dim n as integer = 2
Dim d as decimal = 100.123456
d = Math.Round(d, n);
MessageBox.Show(d.ToString())

ответ: 100.12

0 голосов
/ 27 января 2017

В некоторых других ответах, прилагаемых к этому вопросу, предлагается преобразовать число в строку, а затем использовать символьную позицию «точки» в качестве индикатора числа десятичных знаков. Но это не надежный способ сделать это и приведет к крайне неточным ответам, если число будет иметь много десятичных разрядов, а его преобразование в строку содержит экспоненциальную запись.

Например, для уравнения 1/11111111111111111 (один разделен на 17), преобразование строки - «9E-17», что означает, что в результате получается 5, когда оно должно быть 17. Можно, конечно, извлечь правильный ответ с конца строки, когда присутствует «E-», но зачем все это делать, если вместо этого это можно сделать математически?

Вот функция, которую я только что приготовил для этого. Это не идеальное решение, и я не проверил его полностью, но, похоже, оно работает.

Public Function CountOfDecimalPlaces(ByVal inputNumber As Variant) As Integer
'
' This function returns the count of deciml places in a number using simple math and a loop. The
' input variable is of the Variant data type, so this function is versatile enougfh to work with
' any type of input number.
'
CountOfDecimalPlaces = 0                            'assign a default value of zero
inputNumber = VBA.CDec(inputNumber)                 'convert to Decimal for more working space
inputNumber = inputNumber - VBA.Fix(inputNumber)    'discard the digits left of the decimal
Do While inputNumber <> VBA.Int(inputNumber)        'when input = Int(input), it's done
    CountOfDecimalPlaces = CountOfDecimalPlaces + 1 'do the counting
    inputNumber = inputNumber * 10                  'move the decimal one place to the right
Loop                                                'repeat until no decimal places left
End Function
0 голосов
/ 23 сентября 2016

Для глобализаций ...

Public Function NumberOfDecimalPlaces(ByVal number As Double) As Integer
    Dim numberAsString As String = number.ToString(System.Globalization.CultureInfo.InvariantCulture)
    Dim indexOfDecimalPoint As Integer = numberAsString.IndexOf(".")

    If (indexOfDecimalPoint = -1) Then ' No decimal point in number
        Return 0
    Else
        Return numberAsString.Substring(indexOfDecimalPoint + 1).Length
    End If

End Function
...