A web app I'm working on (another dev wrote it) has a decimal variable that is dropping two zero's after the decimal. It does not drop the trailing 2 digits if they contain a number > 0 or a combination of. The value is coming from a text file.
Example text value is: 261.00
Example decimal variable (TotalDue) is: 261
During debug when I hover over the "TotalDue" (in sample code below) the value displays as 261 and when I expand the debugger it reads "261M":
decimal TotalDue = Convert.ToDecimal(InputRow.Substring(260, 12));
I have tried bringing it in as a string (but initially it still reads as "261" instead of 261.00) and then converting it in various ways as follows. Nothing is working!
string TotalDue = InputRow.Substring(260, 12);
strTotalDue = String.Format("{0:F2}", TotalDue);
strTotalDue = String.Format("{0:N2}", TotalDue);
strTotalDue = String.Format(TotalDue, "0.00");
strTotalDue = TotalDue.ToString("G29");
strTotalDue = String.Format("{0:0.00}", TotalDue);
strTotalDue = TotalDue.ToString("N2");//used this one with decimal data type
What am I missing? Does it matter where the text file data originated? It started in an Access database.
UPDATE: Today (12/1/15) I realized I never marked an answer because I ended up scrapping the original code and rewriting it in C#.net. I will mark Cole Campbell's answer correct because his remarks ("construct the Decimal in a way that provides it with sufficient data regarding the precision of the input.") are what prompted me to come up with the solution I did which was to manipulate the incoming data. I did so in a method - only showing the part that matters (AmtDue) below. Reminder the incoming data was in the format of "261.00" (e.g. AmtDue = 261.00):
string AmtDue = Convert.ToString(AmountDue).Replace(".", "");
string finalstring = ("0000000000" + AmtDue).Substring(AmtDue.Length);
In mathematics, trailing zeros are a sequence of 0 in the decimal representation (or more generally, in any positional representation) of a number, after which no other digits follow.
If you want two decimal places you can use the proper ToString
:
string formatted = TotalDue.ToString("0.00");
> Demo <
Standard Numeric Format Strings
(by the way, ToString("D2")
doesn't work)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With