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

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

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

Доброго времени суток! В результате математических операций получаю числа типа double в диапазоне [-0.01; 1.01] Нужно, чтобы вне зависимости от значения 4 и далее разрядов округлить число до 3 чисел после запятой. Демонстрационный код:
Листинг программы
  1. using System;
  2. namespace RoundTest
  3. {
  4. class Program
  5. {
  6. static void Main(string[] args)
  7. {
  8. double[] values = { 0.12344, 0.12399, 0.6671, 0.66777, 1.0001, 1.0009 };
  9. foreach(double i in values)
  10. {
  11. Console.WriteLine("Value is = " + i);
  12. Console.WriteLine("Round 3 AwayFromZero = " + Math.Round(i, 3, MidpointRounding.AwayFromZero));
  13. Console.WriteLine("Round 3 ToEven = " + Math.Round(i, 3, MidpointRounding.ToEven) + "\n");
  14. }
  15. Console.ReadKey();
  16. }
  17. }
  18. }
Результат:
В результате, 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
Листинг программы
  1. 0.001 * Math.Truncate(d / 0.001)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут