Почему этот расчет и двойное присвоение не работают? [Дубликат]

Во время работы над назначением программирования для класса, где я работаю с сеткой N to N из doodads и сравнивая характеристики случайного doodad с приведенными выше, ниже, слева и справа, я нашел приятное использование этого для предотвращения вложенных операторов и возможных граничных исключений. Моя цель заключалась в том, чтобы свести к минимуму код и не вставлять if-statements.

if (row == 0); 
else (method (grid[row][col], grid[row-1][col]));
if (row == N-1);
else (method (grid[row][col], grid[row+1][col]));
if (col == 0);
else (method (grid[row][col], grid[row][col-1]));
if (col == N-1);<br>
else (method (grid[row][col], grid[row][col+1]));

, где method(Doodad a, Doodad b) выполняет некоторую операцию между a и b.

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

201
задан Bill the Lizard 16 September 2012 в 00:19
поделиться

5 ответов

Вы хотите указать числа:

double num3 = (double)num1/(double)num2;

Примечание. Если какой-либо из аргументов в C # является double, используется разделение double, которое приводит к double. Таким образом, следующее будет работать также:

double num3 = (double)num1/num2;

Для получения дополнительной информации см .:

Dot Net Perls

337
ответ дан Shimmy 17 August 2018 в 18:20
поделиться
  • 1
    Не знаю, совпадает ли это с C #, но C только требует, чтобы вы выбрали первый - он автоматически сделает double / int double. – paxdiablo 19 March 2009 в 05:34
  • 2
    @Pax. Если какой-либо из аргументов в C или C # является двойным, используется двойной разделитель (в результате получается двойной). – strager 19 March 2009 в 06:18
  • 3
    Будьте осторожны, чтобы не делать этого: - double num3 = (double)(num1/num2);. Это просто даст вам двойное представление результата целочисленного деления! – The Lonely Coder 9 October 2014 в 14:57
  • 4
    Ссылка нарушена, новая ссылка: dotnetperls.com/numeric-casts – Ojen 20 November 2014 в 16:51
  • 5
    Предположим, что вам не нужна дополнительная точность, есть ли причина, чтобы использовать double вместо float? Я вижу, что вопрос вызывает double, но мне все равно интересно. – Kyle Delaney 17 May 2017 в 01:31

В дополнение к ответу @ NoahD

Чтобы иметь более высокую точность, вы можете отличить ее до десятичной:

(decimal)100/863
//0.1158748551564310544611819235

Или:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Двойной точность 64 бит, а десятичная - 128

(double)100/863
//0.11587485515643106
20
ответ дан fabriciorissetto 17 August 2018 в 18:20
поделиться
  • 1
    Неправильно! double имеет точность 53 бит, а это двоичный формат с плавающей запятой, тогда как decimal является ... десятичным, конечно, с 96 бит точности . Таким образом, double является точным до ~ 15-17 десятичных цифр и десятичных 28-29 цифр (и не в два раза больше точности double). Что еще более важно decimal фактически использует только 102 из 128 бит – phuclv 8 July 2018 в 06:32
  • 2
    – fabriciorissetto 21 September 2018 в 21:50
  • 3
  • 4
    – Ricardo G Saraiva 26 October 2018 в 15:55

Сначала конвертировать одну из них в двойную. Эта форма работает на многих языках:

 real_result = (int_numerator + 0.0) / int_denominator
5
ответ дан Mark Ransom 17 August 2018 в 18:20
поделиться
  • 1
    не самый читаемый код, хотя – John Shedletsky 5 June 2015 в 19:02
  • 2
    Проще просто делать ... var result = 1.0 * a / b; – Basic 16 March 2017 в 22:24
  • 3
    @Basic существует 100 способов сделать это. Я предпочитаю добавление только потому, что это быстрее, хотя кастинг, очевидно, еще быстрее. – Mark Ransom 17 March 2017 в 00:23
var firstNumber=5000,
secondeNumber=37;

var decimalResult = decimal.Divide(firstNumber,secondeNumber);

Console.WriteLine(decimalResult );
0
ответ дан Rejwanul Reja 17 August 2018 в 18:20
поделиться
  • 1
    Кажется, что этот вопрос вызывает double, а не decimal. – Kyle Delaney 17 May 2017 в 01:32

отличает целые числа.

10
ответ дан Stephen Wrighton 17 August 2018 в 18:20
поделиться
  • 1
    Чтобы быть конкретным, вы можете выделить целое число в double так: (double) myIntegerValue – Whiplash 29 November 2016 в 17:18
Другие вопросы по тегам:

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