У меня такой простой расчет, возвращающий ноль, не может понять его
decimal share=(18 / 58)*100;
У меня такой простой расчет, возвращающий ноль, не может понять его
decimal share=(18 / 58)*100;
Здесь вы работаете с целыми числами. Попробуйте использовать десятичные знаки для всех чисел в вашем расчете.
decimal share = (18m/58m)*100m;
18 / 58
- целочисленное деление, которое приводит к 0.
Если вы хотите десятичное деление, вам нужно использовать десятичные литералы:
decimal share = (18m / 58m) * 100m;
Поскольку некоторые люди ссылаются на это практически из любого потока, где результат вычисления равен 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 / 58
0
в целых делениях.
десятичная доля = (18 * 100)/58;
Всякий раз, когда я сталкиваюсь с такими ситуациями, я просто повышаю численность.
double x = 12.0 / 23409;
decimal y = 12m / 24309;
Console.WriteLine($"x = {x} y = {y}");