2013-06-05 2 views
2

Я хотел бы знать, какие преимущества и недостатки использования Truncate или раунда при округлении поплавка до 2 знаков после запятой:C# Округления 2 знаков после запятой: Обрезание против раунда

float number = 3.4567070 
Math.Round(number, 2) 
Math.Truncate(100 * number)/100 

, который является лучшим и eficent один? Когда использовать раунд и при усечении?

+0

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

ответ

5

Truncate немного более эффективен, но это очень разные функции.

  • Math.Round вычисляет ближайший номер на вход в указанной степень точности.

    Устанавливает значение ближайшему целому числу или заданному числу дробных цифр.

  • Math.Truncate эффективно отбрасывает любые цифры после десятичной точки. Он всегда будет округлен до ближайшего целого числа до нуля.

    Вычисляет интегральную часть числа

Какие функции вы должны использовать полностью зависит от логики, которую вы пытаетесь реализовать.

Вот краткий пример вывод каждой функции:

Input | Round | Truncate 
------+-------+--------- 
-1.6 | -2 |  -1 
-1.5 | -2 |  -1 
-1.4 | -1 |  -1 
-0.5 |  0 |  0 
    0.5 |  0 |  0 
    1.4 |  1 |  1 
    1.5 |  2 |  1 
    1.6 |  2 |  1 
0

Это зависит от вашей цели. Я не думаю, что он более эффективен, чем другой. Это как сказать: «Должен ли я использовать гвоздь или винт?» Они делают разные вещи.

0

Если вы пытаетесь округлять до 2 знаков после запятой, я высоко рекомендую использовать Round() вместо Truncate(), если ни по какой другой причине, чем читаемости & ремонтопригодность. Ваш пример немного сбивает с первого взгляда, и для анализа метода достаточно использовать некоторый анализ, чтобы получить метод Truncate() для выполнения операции округления.

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

Смежные вопросы