Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Decimal data type is stripping trailing zero's when they are needed to display

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);
like image 447
Doreen Avatar asked Dec 07 '12 19:12

Doreen


People also ask

What are trailing zeros with decimal?

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.


1 Answers

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)

like image 188
Tim Schmelter Avatar answered Sep 28 '22 16:09

Tim Schmelter