vb.net, что является хорошим способом отображения десятичной дроби с заданной максимальной длиной - PullRequest
0 голосов
/ 28 апреля 2010

Я пишу пользовательский метод суммирования для вида сетки. Я суммирую довольно большие числа, поэтому я хотел бы использовать десятичную для получения суммы. Проблема в том, что мне нужно контролировать максимальную длину общего количества. Чтобы решить эту проблему, я начал использовать float, но он не поддерживает достаточно большие числа, я получаю это в столбце итогов (1.551538E + 07). Так есть ли какая-нибудь форматирующая строка, которую я могу использовать в .ToString (), чтобы гарантировать, что я никогда не получу больше, чем X символов в общем поле? Имейте в виду, что я суммирую целые и десятичные числа.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2010

Если у вас все в порядке с отображением чисел в научной записи, вы можете указать "E[numberOfDecimalPlaces]" в качестве строки формата.

Например, если вы хотите ограничить строки, скажем, 12 символами, то, учитывая один символ для десятичной точки и пять символов, необходимых для отображения экспоненциальной части, вы можете сделать:

Function FormatDecimal(ByVal value As Decimal) As String
    If value >= 0D Then
        Return value.ToString("E5")
    Else
        ' negative sign eats up another character '
        Return value.ToString("E4")
    End If
End Function

Вот простая демонстрация этой функции:

Dim d(5) As Decimal

d(0) = 1.203D
d(1) = 0D
d(2) = 1231234789.432412341239873D
d(3) = 33.3218403820498320498320498234D
d(4) = -0.314453908342094D
d(5) = 000032131231285432940D

For Each value As Decimal in d
    Console.WriteLine(FormatDecimal(value))
Next

Выход:

1.20300E+000
0.00000E+000
1.23123E+009
3.33218E+001
-3.1445E-001
3.21312E+016
0 голосов
/ 28 апреля 2010

Вы можете использовать Decimal.Round, но я не понимаю точного вопроса, звучит так, как будто вы говорите, что если общая сумма составляет 12345,67, вы можете захотеть показать только 4 цифры и затем отобразить 2345 или Вы просто хотите удалить десятичные дроби?

...