Я пытаюсь найти поплавок с помощью математического раунда. Я нашел следующее
0.5 --> 0
1.5 --> 2
2.5 --> 2
3.5 --> 4
И так далее. Я считаю, что это связано с ошибкой с плавающей запятой, но не совсем понимаю, как это сделать. Как я могу обойти это, чтобы четные числа округлялись правильно?
4 ответа
Из документации;
Ближайшее к a целое число. Если дробная составляющая равна половине между двумя целыми числами, одно из которых четное, а другое нечетное, тогда возвращается четное число. Обратите внимание, что этот метод возвращает Double вместо целого типа.
Метод Math.Round
имеет несколько перегрузок, требующих MidpointRounding
в качестве параметра, в котором вы можете указать значение округления, если оно находится посередине между двумя числами.
AwayFromZero
Когда число находится на полпути между двумя другими, оно округляется до ближайшего числа, отличного от нуля.
ToEven
Когда число находится на полпути между двумя другими, оно округляется до ближайшего четного числа.
a = 3.5
, дробная часть a
равна 0.5
, и строгое прочтение этого предложения может натолкнуть вас на мысль, что 0.0
возвращается. (Жалоба на содержимое MSDN, а не на этот ответ.)
Вы можете использовать это, чтобы преодолеть то, что вы заявили:
Math.Round(value, MidpointRounding.AwayFromZero);
Используя вышеупомянутое:
Когда число находится на полпути между двумя другими, оно округляется до ближайшего числа, отличного от нуля.
Дополнительную документацию по перечислению MidpointRounding
см. В здесь.
Вы можете попробовать вот так
Math.Round(value, MidpointRounding.AwayFromZero);
Из MSDN
Если дробный компонент a находится на полпути между двумя целыми числами, одно из которых четное, а другое нечетное, то возвращается четное число.
Также, чтобы упомянуть один важный момент, который, как мне кажется, стоит упомянуть, это то, что Microsoft следовала Стандарт IEEE 754 . Это также упоминается в MSDN для Math.Round в разделе «Примечания», в котором говорится:
Округлить до ближайшего, связать с четным - округление до ближайшего значения; если число падает на полпути, оно округляется до ближайшего значения с помощью четный (нулевой) младший бит, который встречается в 50% случаев; это является значением по умолчанию для двоичных чисел с плавающей запятой и рекомендуемым значением по умолчанию для десятичного числа.
Округлить до ближайшего, от нуля до нуля - округление до ближайшего значения; если число падает на полпути, оно округляется до ближайшего значения выше (для положительных чисел) или ниже (для отрицательных чисел); это предназначена как опция для десятичных чисел с плавающей запятой.
Это называется банковским округлением (округлением до четного). Подробнее об этом можно узнать здесь. Это функция .NET Framework, которая работает должным образом.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.