Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [VB .NET] Округление до заданного значения


Автор: sated 7.6.2007, 16:49
Здраствуйте.
Есть такая задача:
Стандартные диаметры: 100, 125, 140, 160 и т.д.
Значение 120 необходимо округлить до ближайшего стандартного диаметра.
Ответ должен быть - 125
Если 138, то естественно - 140
Если 104, то 100.
Спасибо.

Автор: Дрон 7.6.2007, 17:28
И в чём тебе надо помочь?

Автор: Exception 7.6.2007, 18:32
Код
''' <summary>Находит ближайшее значение к заданному числу среди предложенных.</summary>
''' <returns>Ближайшее значение к <c>num</c> из массива <c>variants</c>.</returns>
''' <param name="num">Заданное число.</param>
''' <param name="variants">Массив возможных значений.</param>
Public Function FindClosest (num As Integer, variants As Integer()) As Integer
    variants.Sort ()
    Dim myIndex As Integer = variants.BinarySearch (num)
    If myIndex >= 0 Then ' точное совпадение
        Return variants(myIndex)        
    Else
        myIndex = Not (myIndex) ' получаем индекс ближайшего большего элемента
        If myIndex >= variants.Length Then ' больше самого большого
            Return variants(variants.Length - 1) ' возвращаем последнее допустимое значение
        Else ' где-то между двумя значениями
            Dim lesser As Integer = variants(myIndex - 1) ' предыдущее
            Dim greater As Integer = variants(myIndex) ' последующее
            Return Interaction.IIf (num - lesser < greater - num, lesser, greater) ' ближайшее
    End If
End Function

' ...

Dim values As Integer() = New Integer() {10, 15, 20, 25, 30}
Assert.AreEqual (FindClosest (3, values), 10)
Assert.AreEqual (FindClosest (11, values), 10)
Assert.AreEqual (FindClosest (14, values), 15)
Assert.AreEqual (FindClosest (17.5, values), 20) ' возвращает больший
Assert.AreEqual (FindClosest (39, values), 30)


Тесты написал специально, т.к. код писался в браузере и, само собой, не тестировался.

Автор: Exception 7.6.2007, 18:56
http://forum.vingrad.ru/sources/topic-155360.html.

Автор: Exception 7.6.2007, 19:01
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)