Почему возвращает C # Convert.ToDouble (5/100) 0,0, а не 0,05

double variable = Convert.ToDouble(5/100);

Вернет 0,0, но я ожидал 0,05

Что можно / нужно изменить, чтобы получить 0,05

потому что 5 в этом примере - это переменная

8
задан svick 17 June 2013 в 17:39
поделиться

7 ответов

5/100 выполняется в целочисленной арифметике, что дает 0 перед ] преобразование. Попробуйте

double variable = 5.0/100;

Если 5 находится в переменной x (целочисленного типа), тогда используйте:

variable = (double)x/100; 

или

variable = ((double)x)/100;

, чтобы прояснить намерение (спасибо, Джон!)

​​или

variable = x/100.0;
19
ответ дан 5 December 2019 в 06:36
поделиться

5/100 - это целочисленная арифметика. Чтобы иметь двойную точность, одно или несколько значений должны быть двойными.

double result = 5.0/100.0;  
double result = 5.0/100;  
double result = 5/100.0;  
double result = (double)5/100;  
double result = 5/(double)100;

или

double numerator = 5;  
double denominator = 100;  
double result = numerator / denominator;
2
ответ дан 5 December 2019 в 06:36
поделиться

Марко,

попробуйте вместо этого:

double variable = Convert.ToDouble((double)5/100);

jim

[последнее изменение] - как было указано (молчаливыми избирателями :)) использование Convert излишне. Очевидно, это должно быть сделано таким же образом, как и другие записи. Я подтверждаю это, но оставлю это выше в качестве примера того, как быстро получить отрицательное голосование, когда вы в спешке отвечаете на вопрос ... пусть осторожность будет вашим хозяином !!

Кроме того, поскольку мы не знаем, будет ли переменная происходить из строки или числа, ему также следует рассмотреть возможность анализа tryparse и т. Д. Для числа 1, прежде чем выполнять арифметические действия.

-3
ответ дан 5 December 2019 в 06:36
поделиться

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

1.) Почему он так себя ведет?

Обратите внимание, что целые числа - это целые числа, а переменные типа integer могут хранить только целые числа и не могут хранить или распознавать десятичные числа. Когда вы говорите 5/100, и 5, и 100 являются целыми литералами для компьютеров, и это называется целочисленным делением. Результат должен быть 0.05, но поскольку это целочисленное деление, результат также будет целочисленным, и, как я уже сказал, целые числа не могут хранить значения с десятичной точкой, задняя часть после "." (десятичная точка) игнорируется. (десятичная точка) полностью игнорируется, и поэтому результат равен 0.

Добавим к этому, что хотя вы конвертируете результат в двойку, это не имеет никакого значения, потому что до того, как он фактически конвертируется в двойку, результат уже равен 0, и происходит преобразование целого числа 0 в двойку, что в конечном итоге приводит к 0.0.

2.) Как получить желаемый результат?

Другие ответы очень хорошо объясняют решение, поэтому я прошу вас обратиться к этим ответам, а не изобретать колесо заново.

Надеюсь, это поможет.

4
ответ дан 5 December 2019 в 06:36
поделиться

Потому что 5/100 при целочисленном делении равно 0. Вам необходимо убедиться, что вы выполняете деление на удвоение.

2
ответ дан 5 December 2019 в 06:36
поделиться

double variable = 5D / 100D;

1
ответ дан 5 December 2019 в 06:36
поделиться

так что вот мой пересмотренный «обдуманный» ответ ...

поскольку мы не знаем, какой «тип» переменной прибывает в числитель, нам пришлось бы использовать Double.TryParse на этом. В лаборатории мы могли бы приготовить что-то вроде этого:

var numerator = "5"; // let's make it string to prove the point
double parsedNumerator;
int denominator = 100; // this could well be a constant

double result;
if(Double.TryParse(numerator, out parsedNumerator))
{
    // notice no casting or convert fluff
    result = parsedNumerator/denominator;
    // do something with the result
}
else
{
    // warn that the numerator is doo-lallie
}

сейчас прячется под столом - на случай, если я пропустил что-то еще очевидное !! :)

Джим

0
ответ дан 5 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: