Подтвердить что ты не робот

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

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

decimal share=(18 / 58)*100;
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Поскольку некоторые люди ссылаются на это практически из любого потока, где результат вычисления равен 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() );

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

double x = 12.0 / 23409;
decimal y = 12m / 24309;

Console.WriteLine($"x = {x} y = {y}");