Отбросить лишние разряды double (всегда округлять в меньшую сторону) - C#
Формулировка задачи:
Доброго времени суток!
В результате математических операций получаю числа типа double в диапазоне [-0.01; 1.01]
Нужно, чтобы вне зависимости от значения 4 и далее разрядов округлить число до 3 чисел после запятой.
Демонстрационный код:
Результат:
В результате,
0.12344 округляется к 0.123 (математически правильно).
0.12399 округляется к 0.124 (математически правильно, но мне нужно получить 0.123, то есть ОТБРОСИТЬ, всё что после 3 знака после запятой)
То есть мне нужно:
round(0.12344) -> 0.123
round(0.12399) -> 0.123 (а не 0.124)
round(0.6671) -> 0.667
round(0.6679) -> 0.667 (а не 0.668)
round(1.0001) -> 1.000
round(1.0009) -> 1.000 (а не 1.001)
Как это сделать???
Понятно, что типы округления AwayToZero и ToEven в данном диапазоне чисел дадут одинаковые значения.
Я привел их в примере, чтобы их не советовали использовать :-)
using System; namespace RoundTest { class Program { static void Main(string[] args) { double[] values = { 0.12344, 0.12399, 0.6671, 0.66777, 1.0001, 1.0009 }; foreach(double i in values) { Console.WriteLine("Value is = " + i); Console.WriteLine("Round 3 AwayFromZero = " + Math.Round(i, 3, MidpointRounding.AwayFromZero)); Console.WriteLine("Round 3 ToEven = " + Math.Round(i, 3, MidpointRounding.ToEven) + "\n"); } Console.ReadKey(); } } }
Решение задачи: «Отбросить лишние разряды double (всегда округлять в меньшую сторону)»
textual
Листинг программы
0.001 * Math.Truncate(d / 0.001)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д