Результат C# Math.Round() непредсказуем [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Результат C# Math.Round() непредсказуем [дубликат]

Сообщение Anonymous »

Я столкнулся с этой проблемой в своем проекте .NET Framework 4.8, но она также может быть воспроизведена в .NET 8 (https://learn.microsoft.com /en-us/dotnet/api/system.math.round?view=net-8.0#code-try-2).

Код: Выделить всё

// incorrect rounding (double)
Console.WriteLine(Math.Round(71.335, 2, MidpointRounding.AwayFromZero)); // 71.33 (must to be 71.34)
Console.WriteLine(Math.Round(72.335, 2, MidpointRounding.AwayFromZero)); // 72.33 (must to be 72.34)
Console.WriteLine(Math.Round(73.335, 2, MidpointRounding.AwayFromZero)); // 73.33 (must to be 73.34)

// correct rounding (double)
Console.WriteLine(Math.Round(60.335, 2, MidpointRounding.AwayFromZero)); // 60.34
Console.WriteLine(Math.Round(83.335, 2, MidpointRounding.AwayFromZero)); // 83.34

// correct rounding (decimal) which was incorrect for double
Console.WriteLine(Math.Round(71.335M, 2, MidpointRounding.AwayFromZero)); // 71.34
Console.WriteLine(Math.Round(72.335M, 2, MidpointRounding.AwayFromZero)); // 72.34
Console.WriteLine(Math.Round(73.335M, 2, MidpointRounding.AwayFromZero)); // 73.34
Я не понимаю, в чем разница между 71.335, 72.335 и т. д. и 60.335, 83.335 и т. д. что приводит к тому, что Math.Round() ведет себя по-другому.


Подробнее здесь: https://stackoverflow.com/questions/785 ... redictable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»