Вопрос может быть глупым, но я понятия не имею, почему это происходит. Вот проблема: У меня есть double someDouble = (39 * 10)/100;
, и я получаю someDouble = 3.0, вместо 3.9. Я просто не знаю, почему это, пожалуйста, помогите?C# почему двойное округление до целого
ответ
Потому что вы сделали здесь целочисленное деление. .NET имеет 3 типа деления. Из 7.7.2 Отдела оператор
- Целочисленного деление
- деления с плавающей точкой
- Десятичного деление
Целочисленное деление:
Разделения округляет результат к нулю, а абсолютное значение результата - наибольшее возможное целое число, которое меньше абсолютного значения частного из двух операндов.
Вы можете использовать один из них;
double d = (39 * 10)/100d
double d = (39d * 10d)/100d
double d = (double)(39 * 10)/100
Потому что, когда вы умножаете целое число на целое и делите на целое число - вы получаете целое число.
Который неявно литрован, чтобы удвоить после.
Сделать
double someDouble = (39.0 * 10.0)/100.0;
это нормальное поведение попробовать это пожалуйста только для осветления Есть три типа разделения операторов
-
целочисленное деление
-
деление с плавающей точкой
-
Десятичный подразделение
В вашем случае у нас есть целочисленное деление, и компилятор будет рассматривать это как целое, как быструю и простую операцию, в то время как простая точность или операция двойной точности (double, float, decimal in .net) довольно сложная и требует много времени говорится в википедии посмотрите здесь http://en.wikipedia.org/wiki/Floating_point#Multiplication_and_division более понять, что означает
double someDouble = (39f * 10f)/100f;
надежду, что эта помощь
это потому, что вы делаете целочисленное деление:
double someDouble = (39 * 10)/100;
Если вы хотите делать с плавающей точкой деления, то по крайней мере один из операндов должен быть двойной:
double someDouble = (39 * 10)/100.0;
Еще одно решение
double someDouble = ((double)39 * 10)/100;
Все три значения в вашем выражении являются целыми числами. 39 * 10
- целое число. То есть 100. Разделение целого числа 390 на целое число 100 дает 3, как и ожидалось. Затем его бросают, чтобы плавать.
Кроме того, оптимизатор будет оценивать, что постоянное выражение во время компиляции и простого изменения Генерировать IL эквивалента
double someDouble = 3 ;
- 1. C# - Округление до ближайшего целого
- 2. округление до целого числа
- 3. C++ Округление случайное двойное
- 4. двойное округление
- 5. Округление до целого с MPFR
- 6. Округление до ближайшего целого числа
- 7. Округление до ближайшего высшего целого в VBA
- 8. Округление проектора до ближайшего целого числа - VB.NET
- 9. Округление двойного числа до ближайшего целого числа
- 10. Округление до большего целого числа с
- 11. округление до ближайшего целого Ending Digits
- 12. Округление до целого числа - Поле управления округлением?
- 13. Округление переменной до ближайшего целого числа
- 14. Случайное округление до целого числа в Python
- 15. vb.net: округление до следующего целого числа
- 16. Запретить округление десятичного значения до целого
- 17. Как округлить двойное значение до ближайшего целого
- 18. Округление поплавка/двойное условие
- 19. Округление поплавка до ближайшего целого числа в C
- 20. Как округлить двойное значение до ближайшего целого числа в C#
- 21. «Практическое» двойное округление в Java
- 22. Округление до C#
- 23. C++: округление до 64kb
- 24. Округление до ближайшего доллара
- 25. Swift Округление до Двойной
- 26. Как исправить неправильное округление поплавка до целого в Frog Jump?
- 27. Округление удвоений до int C#
- 28. Округление до ближайшего целого числа с плавающей запятой
- 29. Python: Округление до следующего предопределенного целого числа в списке
- 30. NSString округление до ближайшего целого числа, когда я пытаюсь +2.50