How to create an ouput decimal value based on a variable length input field using C#?

I am developing a C# console application using Visual Studio 2005.
How would you modify the following code in the code section that follows
to accept an input value of a string of anywhere from 1 to 10 numeric characters and output a decimal value of up to 8 leading numbers followed by a decimal and 2 values
to the right of the decimal representing cents.
I also want to validate that the string of characters read are all numeric
and with a value for the input field greater than zero.
For example:  Input = 0000000035  yields an output value of  .35
                      Input = 0000000135  yields an output value of 1.35





if (reader.Name == "csc:amount")
                        {
                            arr1[i, 9] = "GROUP_FIELD_NAME:CheckAmount";
                            
                            string value = reader.ReadElementContentAsString();

                            if (value.Length >= 2)
                            {
                                Int64 intTest = 0;
                                if (Int64.TryParse(value, out intTest) && intTest > 0)
                                {
                                    arr1[i, 10] = "GROUP_FIELD_VALUE:" + value.Insert(value.Length - 2, ".");
                                    arr1[i, 10] = "GROUP_FIELD_VALUE:" + value;
                                }
                                else
                                {
                                    arr1[i, 10] = "GROUP_FIELD_VALUE:" + value.Insert(value.Length - 2, ".");
                                    sw1.WriteLine("GROUP_FIELD_NAME:ItemSequence:" + itemsequence + ",GROUP_FIELD_NAME:CheckAmount" + "," + "GROUP_FIELD_VALUE:" + value);
                                }
                            }
                            else
                            {
                                arr1[i, 10] = "GROUP_FIELD_VALUE:" + value;
                                sw1.WriteLine("GROUP_FIELD_NAME:ItemSequence:" + itemsequence + " Field CheckAmount has to be a minimum of 2 characters");
                            }                                     
                        }

Open in new window

zimmer9Asked:
Who is Participating?
 
Todd GerbertConnect With a Mentor IT ConsultantCommented:
In your other question (http:/Q_27322878.html#a36584979) I suggested & demonstrated using Double.TryParse() - which is a great way to make sure the user enters a valid number value. If TryParse() returns true, then the double variable passed into TryParse() will contain the numeric value of the string, and you can just use an if (value <= 0) ... to check if the user entered a number that's zero or less.

Double.TryParse(): http://msdn.microsoft.com/en-us/library/system.double.tryparse.aspx

using System;
using System.Text;

class Program
{
	static void Main(string[] args)
	{
		string userInput = String.Empty;
		double value;

		// Get a string from the user that represents a number
		Console.Write("Enter a number: ");
		userInput = Console.ReadLine();

		// Try to convert the string to a double
		if (!Double.TryParse(userInput, out value))
		{
			Console.WriteLine("You didn't enter a valid number. Press any key to exit.");
			Console.ReadKey();
			Environment.Exit(1);
		}

		// Make sure the entered number is greater than zero
		if (value <= 0)
		{
			Console.WriteLine("You entered a number equal to, or less than, zero.");
			Console.Write("Press any key to exit...");
			Console.ReadKey();
			Environment.Exit(2);
		}

		// Divide the number by 100 to put a decimal point
		// two digits in from the right
		value = value / 100;

		// Output the result using Double.ToString()
		Console.WriteLine(value.ToString("0000000000.00"));
		
		// Another way to output the number as string...
		Console.WriteLine("{0:0000000000.00}", value);

		Console.Write("Press any key to exit...");
		Console.ReadKey();
		Environment.Exit(0);
	}
}

Open in new window

0
 
guramritCommented:
Your code seems OK.
BTW, check my code:

 
string value = "0000000035";

int intTest = 0;
if (int.TryParse(value, out intTest) && intTest > 0)
{
    value = value.PadLeft(10, '0'); // just to make sure that string has length of 10, other wise add leading zeroes.
    value = value.Insert(value.Length - 2, ".");
    decimal oVal = Convert.ToDecimal(value);

    // do something with 'oVal' like...   

    value = oVal.ToString();

    // now value contains ".35"
}

Open in new window


I think you may be facing problem like value of "value" is not updated after

arr1[i, 10] = "GROUP_FIELD_VALUE:" + value.Insert(value.Length - 2, ".");

because value.Insert() doesn't modify the value of "value", It returns the modified value.
0
 
Todd GerbertIT ConsultantCommented:
Ha, I didn't notice you already have TryParse() in your code. ;)

That will check to make sure value is all numeric.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.