I Need to modify the following code to be able to do floating point numbers Right now all I can handle is whole numbers with this calculator. Could someone please help me and modify my code to handle floating point numbers. thank You.
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace HexCalcChar { public partial class Calc : Form { private string m_value; private ArrayList m_store; private System.Windows.Forms.Label lbRes; public Calc() { InitializeComponent(); Decimal.Checked = true; m_value = ""; m_store = new ArrayList(); } private void AddOperatorToArray(Button bttn) { //the following changes the first part of number to int for hex dec oct bin. if (HexDecimal.Checked) { m_store.Add(baseToInt(m_value, 16)); lbRes.Text += bttn.Text; m_value = ""; m_store.Add(bttn.Text); //Period.Enabled = true; SetEnableOperatorBttns(false); } else if (Octal.Checked) { m_store.Add(baseToInt(m_value, 8)); lbRes.Text += bttn.Text; m_value = ""; m_store.Add(bttn.Text); // Period.Enabled = true; SetEnableOperatorBttns(false); } else if (Decimal.Checked) { m_store.Add(baseToInt(m_value, 10)); lbRes.Text += bttn.Text; m_value = ""; m_store.Add(bttn.Text); //Period.Enabled = true; SetEnableOperatorBttns(false); } else if (Binary.Checked) { m_store.Add(baseToInt(m_value, 2)); lbRes.Text += bttn.Text; m_value = ""; m_store.Add(bttn.Text); //Period.Enabled = true; SetEnableOperatorBttns(false); } } private void AddToArray(Button bttn) { m_value += bttn.Text; lbRes.Text += bttn.Text; SetEnableOperatorBttns(true); } private void Reset() { m_value = ""; lbRes.Text = ""; m_store.Clear(); //Period.Enabled = true; } private void SetEnableOperatorBttns(bool enable) { Add.Enabled = enable; Subtract.Enabled = enable; Times.Enabled = enable; Divide.Enabled = enable; Equals.Enabled = enable; } private string intToBase(int input, int @base) { // the following converts base to int and int to base covers bases 2-36 // does not cover floating point numbers or negative numbers var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (@base < 2 || @base > 36) { throw new ArgumentOutOfRangeException("base", "Must specify a base between 2 and 36, inclusive"); } if (input < @base && input >= 0) { return digits[input].ToString(); } else { return intToBase(input / @base, @base) + digits[input % @base].ToString(); } } private int baseToInt(string input, int @base) { var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (@base < 2 || @base > 36) { throw new ArgumentOutOfRangeException("base", "Must specify a base between 2 and 36, inclusive"); } var digitsInBase = digits.Substring(0, @base); if (input.Any(c => !digitsInBase.Contains(c))) { throw new ArgumentOutOfRangeException("input", string.Format("Input is not a valid base {0} number", @base)); } return (int)input.Select((c, i) => Math.Pow(@base, input.Length - (i + 1)) * digitsInBase.IndexOf(c)).Sum(); } private void btn0_Click(object sender, EventArgs e) { AddToArray(btn0); } private void btn1_Click(object sender, EventArgs e) { AddToArray(btn1); } private void btn2_Click(object sender, EventArgs e) { AddToArray(btn2); } private void btn3_Click(object sender, EventArgs e) { AddToArray(btn3); } private void btn4_Click(object sender, EventArgs e) { AddToArray(btn4); } private void btn5_Click(object sender, EventArgs e) { AddToArray(btn5); } private void btn6_Click(object sender, EventArgs e) { AddToArray(btn6); } private void btn7_Click(object sender, EventArgs e) { AddToArray(btn7); } private void btn8_Click(object sender, EventArgs e) { AddToArray(btn8); } private void btn9_Click(object sender, EventArgs e) { AddToArray(btn9); } private void HexA_Click(object sender, EventArgs e) { AddToArray(HexA); } private void HexB_Click(object sender, EventArgs e) { AddToArray(HexB); } private void HexC_Click(object sender, EventArgs e) { AddToArray(HexC); } private void HexD_Click(object sender, EventArgs e) { AddToArray(HexD); } private void HexE_Click(object sender, EventArgs e) { AddToArray(HexE); } private void HexF_Click(object sender, EventArgs e) { AddToArray(HexF); } //private void Period_Click(object sender, EventArgs e) //{ //AddToArray(Period); //Period.Enabled = false; // } private void Equals_Click(object sender, EventArgs e) { // the following convert second half of numbers to int from base and does math then converts back to base if (Decimal.Checked) { try { m_store.Add(m_value); m_store.Add(Equals.Text); int m_res = int.Parse(m_store[0].ToString()); for (int i = 0; i < m_store.Count; i++) { if (m_store[i].ToString() == "+") { lbRes.Text = ""; m_res += int.Parse(m_store[i + 1].ToString()); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "-") { lbRes.Text = ""; m_res -= int.Parse(m_store[i + 1].ToString()); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "*") { lbRes.Text = ""; m_res *= int.Parse(m_store[i + 1].ToString()); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "/") { lbRes.Text = ""; m_res /= int.Parse(m_store[i + 1].ToString()); lbRes.Text = m_res.ToString(); } } m_store.Clear(); m_value = lbRes.Text; //for (int i = 0; i < m_value.Length; i++) //{ // if (m_value[i].ToString() == ".") // { // Period.Enabled = false; // break; //} // else //{ // Period.Enabled = true; //} // } Equals.Enabled = false; } catch (Exception exception) { Reset(); MessageBox.Show(exception.Message, "Error"); } } else if (HexDecimal.Checked) { try { m_store.Add(baseToInt(m_value, 16)); m_store.Add(Equals.Text); int m_res = int.Parse(m_store[0].ToString()); for (int i = 0; i < m_store.Count; i++) { if (m_store[i].ToString() == "+") { lbRes.Text = ""; m_res += int.Parse(m_store[i + 1].ToString()); //string hexValue = intToBase(m_res, 16); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "-") { lbRes.Text = ""; m_res -= int.Parse(m_store[i + 1].ToString()); //string hexValue = intToBase(m_res, 16); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "*") { lbRes.Text = ""; m_res *= int.Parse(m_store[i + 1].ToString()); //string hexValue = intToBase(m_res, 16); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "/") { lbRes.Text = ""; m_res /= int.Parse(m_store[i + 1].ToString()); //string hexValue = intToBase(m_res, 16); lbRes.Text = m_res.ToString(); } } m_store.Clear(); string hexValue = intToBase(m_res, 16); lbRes.Text = hexValue; //for (int i = 0; i < m_value.Length; i++) //{ // if (m_value[i].ToString() == ".") // { // Period.Enabled = false; // break; // } // else // { // Period.Enabled = true; // } // } Equals.Enabled = false; } catch (Exception exception) { Reset(); MessageBox.Show(exception.Message, "Error"); } } else if (Octal.Checked) { try { m_store.Add(baseToInt(m_value, 8)); m_store.Add(Equals.Text); int m_res = int.Parse(m_store[0].ToString(), System.Globalization.NumberStyles.HexNumber); for (int i = 0; i < m_store.Count; i++) { if (m_store[i].ToString() == "+") { lbRes.Text = ""; m_res += int.Parse(m_store[i + 1].ToString()); //string octValue = intToBase(m_res, 8); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "-") { lbRes.Text = ""; m_res -= int.Parse(m_store[i + 1].ToString()); //string octValue = intToBase(m_res, 8); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "*") { lbRes.Text = ""; m_res *= int.Parse(m_store[i + 1].ToString()); //string octValue = intToBase(m_res, 8); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "/") { lbRes.Text = ""; m_res /= int.Parse(m_store[i + 1].ToString()); //string octValue = intToBase(m_res, 8); lbRes.Text = m_res.ToString(); } } m_store.Clear(); string octValue = intToBase(m_res, 8); lbRes.Text = octValue; //for (int i = 0; i < m_value.Length; i++) //{ // if (m_value[i].ToString() == ".") // { // Period.Enabled = false; // break; // } // else // { // Period.Enabled = true; // } // } Equals.Enabled = false; } catch (Exception exception) { Reset(); MessageBox.Show(exception.Message, "Error"); } } else if (Binary.Checked) { try { m_store.Add(baseToInt(m_value, 2)); m_store.Add(Equals.Text); //Divide.Enabled = false; int m_res = int.Parse(m_store[0].ToString()); for (int i = 0; i < m_store.Count; i++) { if (m_store[i].ToString() == "+") { lbRes.Text = ""; m_res += int.Parse(m_store[i + 1].ToString()); //string binValue = intToBase(m_res, 2); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "-") { lbRes.Text = ""; m_res -= int.Parse(m_store[i + 1].ToString()); //string binValue = intToBase(m_res, 2); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "*") { lbRes.Text = ""; m_res *= int.Parse(m_store[i + 1].ToString()); //string binValue = intToBase(m_res, 2); lbRes.Text = m_res.ToString(); } else if (m_store[i].ToString() == "/") { lbRes.Text = ""; m_res /= int.Parse(m_store[i + 1].ToString()); //string binValue = intToBase(m_res, 2); lbRes.Text = m_res.ToString(); } } m_store.Clear(); string binValue = intToBase(m_res, 2); lbRes.Text = binValue; //for (int i = 0; i < m_value.Length; i++) //{ // if (m_value[i].ToString() == ".") // { // Period.Enabled = false; // break; // } // else // { // Period.Enabled = true; // } // } Equals.Enabled = false; } catch (Exception exception) { Reset(); MessageBox.Show(exception.Message, "Error"); } } } private void Times_Click(object sender, EventArgs e) { AddOperatorToArray(Times); } private void Subtract_Click(object sender, EventArgs e) { AddOperatorToArray(Subtract); } private void Add_Click(object sender, EventArgs e) { AddOperatorToArray(Add); } private void Divide_Click(object sender, EventArgs e) { AddOperatorToArray(Divide); } private void ClearEntry_Click(object sender, EventArgs e) { Reset(); } private void Percentage_Click(object sender, EventArgs e) { } private void Clear_Click(object sender, EventArgs e) { Reset(); } private void HexDecimal_CheckedChanged(object sender, EventArgs e) { // the following sets buttons for proper bases //m_value = ""; lbRes.Text = ""; //Period.Enabled = false; btn0.Enabled = true; btn1.Enabled = true; btn2.Enabled = true; btn3.Enabled = true; btn4.Enabled = true; btn5.Enabled = true; btn6.Enabled = true; btn7.Enabled = true; btn8.Enabled = true; btn9.Enabled = true; HexA.Enabled = true; HexB.Enabled = true; HexC.Enabled = true; HexD.Enabled = true; HexE.Enabled = true; HexF.Enabled = true; } private void Decimal_CheckedChanged(object sender, EventArgs e) { //m_value = ""; lbRes.Text = ""; // Period.Enabled = false; btn0.Enabled = true; btn1.Enabled = true; btn2.Enabled = true; btn3.Enabled = true; btn4.Enabled = true; btn5.Enabled = true; btn6.Enabled = true; btn7.Enabled = true; btn8.Enabled = true; btn9.Enabled = true; HexA.Enabled = false; HexB.Enabled = false; HexC.Enabled = false; HexD.Enabled = false; HexE.Enabled = false; HexF.Enabled = false; } private void Octal_CheckedChanged(object sender, EventArgs e) { //m_value = ""; lbRes.Text = ""; // Period.Enabled = false; btn0.Enabled = true; btn1.Enabled = true; btn2.Enabled = true; btn3.Enabled = true; btn4.Enabled = true; btn5.Enabled = true; btn6.Enabled = true; btn7.Enabled = true; btn8.Enabled = false; btn9.Enabled = false; HexA.Enabled = false; HexB.Enabled = false; HexC.Enabled = false; HexD.Enabled = false; HexE.Enabled = false; HexF.Enabled = false; } private void Binary_CheckedChanged(object sender, EventArgs e) { //m_value = ""; lbRes.Text = ""; // Period.Enabled = false; btn0.Enabled = true; btn1.Enabled = true; btn2.Enabled = false; btn3.Enabled = false; btn4.Enabled = false; btn5.Enabled = false; btn6.Enabled = false; btn7.Enabled = false; btn8.Enabled = false; btn9.Enabled = false; HexA.Enabled = false; HexB.Enabled = false; HexC.Enabled = false; HexD.Enabled = false; HexE.Enabled = false; HexF.Enabled = false; } } }
michael r demulling