atul sharma 5126 Ответов: 3

Как Удалить Конечные Нули Только После Десятичных Знаков


Всем Привет,

Я использую следующий код для удаления конечных нулей после десятичной дроби для поля в сетке:

dtBOMDetails.Columns.Add("NewQty")
        For Each row As DataRow In dtBOMDetails.Rows
            row.Item("NewQty") = row.Item("TQTY").ToString.TrimEnd(".0".ToCharArray)
        Next


Проблема в том, что он также преобразует 100 в 1, то есть нули в конце также удаляются, даже если перед десятичной дробью.
Пожалуйста, предложите.
Я хочу получить следующие результаты:
9.23000 = 9.23
90.00000 = 90

Спасибо

PIEBALDconsult

Вы не должны использовать строки для чисел.

3 Ответов

Рейтинг:
5

atul sharma 5126

Решить ее. Если для использования для кого-то, я создал следующую общую функцию:

Public Function fnNumberwithoutzero(ByRef Value As String)
        fnNumberwithoutzero = 0

        Dim parts() As String = Value.Split("."c)
        If parts.Length = 2 Then
            Dim firsthalf As Object = parts(0)
            Dim secondhalf As Object = parts(1).ToString.TrimEnd("0".ToCharArray)

            If secondhalf = "" Then
                fnNumberwithoutzero = firsthalf
            Else
                fnNumberwithoutzero = firsthalf & "." & secondhalf
            End If
        End If

            Return fnNumberwithoutzero
    End Function


Надеюсь, что другие найдут это полезным.


KP Ghori

Вышеуказанная функция не работает должным образом
если я ввожу 03.00 то он возвращает 03
это неправильный ответ.

atul sharma 5126

Если вы также хотите удалить предыдущие нули, а затем pls использовать эту обновленную функцию:

Публичная функция fnNumberwithoutzero(значение ByRef в виде строки)
fnNumberwithoutzero = 0

Dim parts() As String = Value.Split("."c)

- для удаления предшествующих нулей
Дим первойполовине как объект = запчасти(0).Метод toString.TrimStart("0".ToCharArray)

- для удаления конечных нулей
Если части.Тогда Длина = 2

Тусклая вторая половина как объект = части(1).Метод toString.TrimEnd("0".ToCharArray)

Если второйполовине = "" тогда
fnNumberwithoutzero = первойполовине
Еще
fnNumberwithoutzero = первойполовине &ампер; "".&ампер; второйполовине
Конец, Если
Еще
fnNumberwithoutzero = первойполовине
Конец, Если

Возврат fnNumberwithoutzero
Конечная Функция

Рейтинг:
2

Wendelius

Почему бы сначала не преобразовать число в числовой формат, а затем использовать ToString, чтобы отформатировать его желаемым образом. Видеть
- Десятичный.Метод ToString (Строка)[^]
- Строки Стандартных Числовых Форматов [^]
- Строки Пользовательского Числового Формата[^]

Например

row.Item("NewQty") = CType(row.Item("TQTY"), decimal).ToString("G")


Рейтинг:
0

jmccr78

Я сделал нижеприведенные методы расширения для себя, чтобы соответствовать одному из моих проектов, но, возможно, они будут полезны кому-то еще.

Imports System.Numerics
Imports System.Text.RegularExpressions
Imports System.Runtime.CompilerServices

Friend Module ExtensionMethod
    <Extension()>
    Friend Function TrimDecimal(ByVal obj As BigInteger) As String
        Return obj.ToString().TrimDecimal()
    End Function

    <Extension()>
    Friend Function TrimDecimal(ByVal obj As Decimal) As String
        Return New BigInteger(obj).ToString().TrimDecimal()
    End Function

    <Extension()>
    Friend Function TrimDecimal(ByVal obj As Double) As String
        Return New BigInteger(obj).ToString().TrimDecimal()
    End Function

    <Extension()>
    Friend Function TrimDecimal(ByVal obj As Single) As String
        Return New BigInteger(obj).ToString().TrimDecimal()
    End Function

    <Extension()>
    Friend Function TrimDecimal(ByVal obj As String) As String
        If String.IsNullOrWhiteSpace(obj) OrElse Not Regex.IsMatch(obj, "^(\d+([.]\d*)?|[.]\d*)$") Then Return String.Empty
        Dim rex As Regex = New Regex("^[0]*(?<pre>([0-9]+)?)(?<post>([.][0-9]*)?)$")
        Dim mev As MatchEvaluator = Function(m) String.Concat(If(m.Groups("pre").Length > 0, m.Groups("pre").Value, "0"), m.Groups("post").Value.TrimEnd({"."c, "0"c}))
        Return rex.Replace(obj, mev)
    End Function
End Module


Хотя для этого потребуется ссылка на System.Numerics.