Разница между Math.Floor () и Math.Truncate ()

У меня есть другая идея, но очень сложная и необходимо изменить структуру данных.

Вы можете использовать индекс геолокации , который поддерживается mongodb

. Сначала , измените свои данные на эту структуру и сохраните второе значение с помощью 0

{'ratio':[1.437, 0]}

. Затем вы можете использовать оператор $near, чтобы найти ближайшее значение отношения, а также потому, что оператор возвращает список, отсортированный по расстоянию с целым числом, которое вы даете, вы должны использовать limit, чтобы получить только самое близкое значение.

db.places.find( { ratio : { $near : [50,0] } } ).limit(1)

Если вы не хотите этого делать, я думаю, вы можете просто использовать ответ @ JohnnyHK: )

399
задан GedAWizardofEarthSea 25 February 2017 в 17:42
поделиться

3 ответа

Math.Floor округляет в меньшую сторону, Math.Ceiling окружает, и Math.Truncate раунды по направлению к нулю. Таким образом, Math.Truncate похож Math.Floor для положительных чисел, и как Math.Ceiling для отрицательных чисел. Вот ссылка .

Для полноты, Math.Round раунды к самому близкому целому числу. Если число точно на полпути между двумя целыми числами, то оно округляется к даже одному. Ссылка.

См. также: ответ Diablo Мира . Наиболее рекомендуемый!

460
ответ дан Community 25 February 2017 в 17:42
поделиться

Некоторые примеры:

Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7

Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1
42
ответ дан Marek Grzenkowicz 25 February 2017 в 17:42
поделиться

Перейдите по этим ссылкам для описаний MSDN:

  • Math.Floor , который округляет в меньшую сторону к отрицательной бесконечности.
  • Math.Ceiling , который окружает к положительной бесконечности.
  • Math.Truncate , который окружает или вниз по направлению к нулю.
  • Math.Round , который округляется к ближайшему целому числу или конкретному количеству десятичных разрядов. Можно указать поведение, если это является точно равноотстоящим между двумя возможностями, таким как округление так, чтобы заключительная цифра была даже (" Round(2.5,MidpointRounding.ToEven)" становление 2) или так, чтобы это было еще дальше от нуля (" Round(2.5,MidpointRounding.AwayFromZero)" становление 3).

следующая схема и таблица могут помочь:

-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

Примечание, которое Round намного более мощно, чем он, кажется, просто потому что это может вокруг к определенному количеству десятичных разрядов. Все другие вокруг для обнуления десятичных чисел всегда. Например:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

С другими функциями, необходимо использовать, умножаются/делят обман для достижения того же эффекта:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15
371
ответ дан luiges90 26 February 2017 в 03:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: