2013-11-19 5 views

ответ

4

Потому что вы сделали здесь целочисленное деление. .NET имеет 3 типа деления. Из 7.7.2 Отдела оператор

  • Целочисленного деление
  • деления с плавающей точкой
  • Десятичного деление

Целочисленное деление:

Разделения округляет результат к нулю, а абсолютное значение результата - наибольшее возможное целое число, которое меньше абсолютного значения частного из двух операндов.

Вы можете использовать один из них;

double d = (39 * 10)/100d 
double d = (39d * 10d)/100d 
double d = (double)(39 * 10)/100 
7

Потому что, когда вы умножаете целое число на целое и делите на целое число - вы получаете целое число.

Который неявно литрован, чтобы удвоить после.

3

Сделать

double someDouble = (39.0 * 10.0)/100.0; 
2

это нормальное поведение попробовать это пожалуйста только для осветления Есть три типа разделения операторов

    целочисленное деление
    деление с плавающей точкой
    Десятичный подразделение

В вашем случае у нас есть целочисленное деление, и компилятор будет рассматривать это как целое, как быструю и простую операцию, в то время как простая точность или операция двойной точности (double, float, decimal in .net) довольно сложная и требует много времени говорится в википедии посмотрите здесь http://en.wikipedia.org/wiki/Floating_point#Multiplication_and_division более понять, что означает

double someDouble = (39f * 10f)/100f; 

надежду, что эта помощь

3

это потому, что вы делаете целочисленное деление:

double someDouble = (39 * 10)/100; 

Если вы хотите делать с плавающей точкой деления, то по крайней мере один из операндов должен быть двойной:

double someDouble = (39 * 10)/100.0; 
3

Еще одно решение

double someDouble = ((double)39 * 10)/100; 
0

Все три значения в вашем выражении являются целыми числами. 39 * 10 - целое число. То есть 100. Разделение целого числа 390 на целое число 100 дает 3, как и ожидалось. Затем его бросают, чтобы плавать.

Кроме того, оптимизатор будет оценивать, что постоянное выражение во время компиляции и простого изменения Генерировать IL эквивалента

double someDouble = 3 ; 
Смежные вопросы