Отдел возвращает ноль

У меня такой простой расчет, возвращающий ноль, не может понять это

decimal share=(18 / 58)*100; 

Здесь вы работаете с целыми числами. Попробуйте использовать десятичные знаки для всех чисел в вашем расчете.

  decimal share = (18m/58m)*100m; 

18 / 58 – целочисленное деление, которое приводит к 0.

Если вы хотите десятичное деление, вам нужно использовать десятичные литералы:

 decimal share = (18m / 58m) * 100m; 

Поскольку некоторые люди связывают это с почти любым streamом, где результат вычисления равен 0, я добавляю это как решение, так как не все остальные ответы относятся к сценариям случая.

Понятие необходимости выполнения расчетов по различным типам для получения этого типа в качестве результата применяется, однако выше только показывает «десятичный» и использует его короткую форму, такую ​​как 18m качестве одной из переменных, подлежащих вычислению.

 // declare and define initial variables. int x = 0; int y = 100; // set the value of 'x' x = 44; // Results in 0 as the whole number 44 over the whole number 100 is a // fraction less than 1, and thus is 0. Console.WriteLine( (x / y).ToString() ); // Results in 0 as the whole number 44 over the whole number 100 is a // fraction less than 1, and thus is 0. The conversion to double happens // after the calculation has been completed, so technically this results // in 0.0 Console.WriteLine( ((double)(x / y)).ToString() ); // Results in 0.44 as the variables are cast prior to calculating // into double which allows for fractions less than 1. Console.WriteLine( ((double)x / (double)y).ToString() ); 

Потому что числа являются целыми числами, и вы выполняете целочисленное деление.

18 / 580 в целых делениях.

десятичная доля = (18 * 100) / 58;

Всякий раз, когда я сталкиваюсь с такими ситуациями, я просто поднимаю числитель.

 double x = 12.0 / 23409; decimal y = 12m / 24309; Console.WriteLine($"x = {x} y = {y}"); 
  • Что делать 1. # INF00, -1. # IND00 и -1. # IND означает?
  • Почему у нас нет виртуального конструктора на C ++?
  • Автоматическое выделение текста в элементе управления текстовым полем
  • Как подавить предупреждения о неиспользованном параметре в C?
  • Получить MIME-тип из расширения файла
  • C # Передача функции в качестве аргумента
  • Невозможно преобразовать массив типа значения в объект params
  • В чем разница между vmalloc и kmalloc?
  • C # найти максимальное значение и индекс массива
  • Предоставляет ли List порядок вставки?
  • Ковариация и IList
  • Давайте будем гением компьютера.