2011-12-28 2 views
2

Я делаю калькулятор на C#. я должен использовать поплавок, потому что, когда я делить числа, я получаю ответ меньше 0. , но я хочу, калькулятор, чтобы начать новый расчет с ответом я уже получил, так что я писал:Калькулятор C#, как указать ввод в ответ?

a = Convert.ToInt64(answer); 

, но это не помогает, оно также преобразует ответ в int64. Думаю, я смогу сделать это с указателями, но я не знаю, как это сделать.

Итак, как я могу скопировать значение ответа на «a» (вход) без преобразования ответа?

Int64 a; //1st Input 
    Int64 b; //2nd Input 
    float answer; 
    char d; 
    bool pressed; 
    private void button11_Click(object sender, EventArgs e) 
    { 
     if (d == '+') answer = a + b; 
     if (d == '-') answer = a - b; 
     if (d == '*') answer = a * b; 
     if (d == '/') answer = a/b; 
     textBox1.Text = a.ToString() + d + b.ToString() + '=' +answer.ToString(); 
     a = Convert.ToInt64(answer); 
     b = 0; 
    } 

извините, из-за отсутствия исходного кода всего, если кто-то хочет это я добавить их слишком просто сказать мне :)

+1

Это домашнее задание? – crashmstr

+0

Хм, я не вижу указателей в коде, который вы отправили, поэтому я удаляю тег. –

+8

Вы не можете изучать C#, задавая вопросы и читаете ответы. Пойдите, найдите себе книгу и изучите C#. Затем, когда вы столкнетесь с какой-то реальной проблемой, вернитесь сюда за помощью. –

ответ

2

Пара наблюдений, которые могут помочь:

  1. Ваши входы, вероятно, не должны быть Int64 в первую очередь, так как маловероятно, пользователь будет работать только в целых числах, особенно когда они начинают использовать разделение.
  2. Ваш ответ и ваши входы должны быть одного типа, это устранит ваши проблемы с кастом.
  3. Поплавок является неточным и может быть не лучшим вариантом. Если вам нужна более высокая точность, чем позволяет Float, вы можете попробовать Decimal. (если вы не знаете об ограничениях арифметики с плавающей запятой, Google для нее)
+1

Я хочу, чтобы калькулятор дал не полный ответ, как мне помочь Decimal? – vato

+0

Интс всех размеров используется только для целых (целых) чисел. Десятичный - это точный тип, который допускает не целое число. Если вы переместите все в десятичное, вы также можете удалить свой вызов Convert.ToInt64(). – mynameiscoffey

0

Два варианта рассмотреть:

  • ли только целочисленное деление ,
  • Используйте типы переменных с плавающей точкой для ввода и вывода.
1

Прежде всего, ребята, он не спрашивает, как сделать калькулятор, он просто просит помощи по конкретной проблеме, я думаю, что это то, что Предполагается, что SO.

Вы на правильном пути, просто нужны некоторые корректировки.

Операции

Вы, скорее всего, не нужно Int64, вы, вероятно, ищет float или double. Так вот простой пример:

float a = 1.0f; 
float b = 2.0f; 
float answer = a/b; 

Здесь ответ будет 0.5, если a и b были целыми числами ответ будет 0. Если какой-либо один (или оба) являются float или double, то ответ будет десятичное число.

Если заявление

В то время как мы в этом, ваше заявление, если можно улучшить, сделав его, если-то еще:

if (d == '+') answer = a + b; 
else if (d == '-') answer = a - b; 
else if (d == '*') answer = a * b; 
else if (d == '/') answer = a/b; 

Почему?Потому что d будет только один этих строк (+, -, *, /). Если if-else, как только случай верен, остальная часть if's пропускается. С вашим кодом, даже если d равно +, остальные три оператора if все еще проверяются.

+1

спасибо, но есть ли возможности оставить a и b int64, получить ответ в float и, наконец, сделать «a» равным ответить, продолжить вычисление? потому что, я хочу, чтобы пользователь вводил более 10 цифр ввода. – vato

+0

В этом случае вы можете использовать double вместо float. Double - это 64-разрядное число, а float - 32-битное число. – prestomanifesto