Отбросить лишние разряды double (всегда округлять в меньшую сторону) - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! В результате математических операций получаю числа типа double в диапазоне [-0.01; 1.01] Нужно, чтобы вне зависимости от значения 4 и далее разрядов округлить число до 3 чисел после запятой. Демонстрационный код:
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();
        }
    }
}
Результат:
В результате, 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 в данном диапазоне чисел дадут одинаковые значения. Я привел их в примере, чтобы их не советовали использовать :-)

Решение задачи: «Отбросить лишние разряды double (всегда округлять в меньшую сторону)»

textual
Листинг программы
0.001 * Math.Truncate(d / 0.001)

Оцени полезность:

14   голосов , оценка 3.929 из 5