Вот тест (xUnit), который у меня выполняется успешно, и это плохо для меня:
double value1 = 2097151.135;
double value2 = 2097152.135;
double expected1 = 2097151.14;
double expected2 = 2097152.13;
double result1 = Math.Round( value1, 2, MidpointRounding.AwayFromZero );
double result2 = Math.Round( value2, 2, MidpointRounding.AwayFromZero );
Assert.Equal( expected1, result1, 2 );
Assert.Equal( expected2, result2, 2 );
У меня вопрос, почему именно для чисел, начиная с 2_097_152 начинает неверно работать округление, не так, как описано в документации на метод Round()
У меня Visual Studio 2017 + c# + .net core 2.0
Дело в том, что десятичные числа с дробной частью не представимы точно в формате double.
2097151.135 это примерно 2.09715113500000000931322574615*106
2097152.135 это примерно 2.09715213499999977648258209229*106
Поэтому одно округляется в к 2.09715114*106, а второе - к 2.09715113*106 (точнее к их ближайшим представимым в double значениям).
Если вам нужно точное представление для десятичный чисел - используйте decimal.
Если хотите подробностей - почитайте вопрос-ответ Вычисления на числах с плавающей точкой не работают.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите разобратся с вопросов - как тестировать интерфейсы кросплатформенных приложений на Xamarin под iOS? Есть XamarinForms решение
Делаю расширение для ChromeХочу сделать так, чтобы при клике на иконку приложения справа, открывался новый таб с url "http://localhost"
Здравствуйте! Подскажите пожалуйста, как можно хранить данные пользователей в файле(не используя бд), например: