c# string format - c#

How do I get the output of this to read 0 instead of 00 when the value is 0?
String.Format("{0:0,0}", myDouble);

string.Format("{0:#,0}", myDouble);
(tested version)

String.Format("{0:#,0}", myDouble);

Another alternative is to use this:
string s = string.Format("{0:n0}", myDouble);
If you always want commas as the thousands separator and not to use the user's locale then use this instead:
string s = myDouble.ToString("n0", CultureInfo.InvariantCulture);

While the posted answers here ("{0:#,0}") are correct I would strongly suggest using a more readable picture (also to avoid confusion about decimal/thousand separators):
string.Format("{0:#,##0}", v); // to print 1,234
string.Format("{0:#,##0.00}", v); // to print 1,234.56
But all those pictures work the same, including 2 comma's for 1e6 etc.

Related

Numbers input in C#

I know this should be an easy thing but I don't know how to do it.
I want to insert some data into a table, and I'm using loops because I have over 1million datas to insert. It should look like this "PM-0000000000, PM-0000000001......... PM-0000099999". Now here's the problem. I don't know how to add those zeros in front according to the numbers that are after the zeros. the number length (PM-"0000000000") Should always be 10.
Help please ?
Use padleft to fill the string with the number of zeros you need
string value="99999";
string concat= "PM" + value.PadLeft(10, '0');
Please check this documentation: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#DFormatString
int yourNumber = 999;
string filledNumber = yourNumber.ToString("D10");
Where D10 means, your number will be filled to 10 digits.
You can do string result = number.ToString("0000000000");
But I prefer #Kasyx's answer above. (I added this answer for completeness.)
you can generate full code using string.Format
string.Format("PM-{0:D10}", intval)

C# - Unexpected results when converting a string to double

I have a string with value "20.616378139" and when i try to convert using Convert.ToDouble or Double.Parse i get 20616378139.0 insted of the right value.
Why is this happening and how should I fix it?
You probably live in a part of the world where the decimal point is written as a comma. Fix:
var str = "20.616378139";
var dbl = double.Parse(str, System.Globalization.CultureInfo.InvariantCulture);
There's an overload to the Parse method that provides an options parameter of some kind; this is the way that you can specify for it to handle scientific notation, etc. Try setting that explicitly. If that works, then look at the default culture info settings you are using.
I've used this command and there is no problem for me before.
string s = "20.616378139";
double d = Convert.ToDouble(s);
![enter image description here][1]

Need to print double as 12.20 instead of 12.2

double s = 12.20;
Console.WriteLine(s);
It prints 12.2 but I need it to print 12.20. How can I do this?
You can specify the format for converting a number to a string - here's one way of many. Google ".net numeric format strings" for more...
Console.WriteLine(s.ToString("0.00"));
quoting this
Console.WriteLine(value.ToString("F")); // Displays -16325.00
try s.ToString("0.00");

C# Decimal Formatting Query

I am trying to format a decimal so that it will get displayed as so:
14.5 should get displayed as "14.50"
14.50 should get displayed as "14.50"
14.05 should get displayed as "14.05"
14.00 should get displayed as "14"
Is the possible with a single String Format, i.e. not using conditional formatting?
I've tried "0.##" (doesn't satisfy the first example) and "0.00" (doesn't satisfy the last example).
Thanks.
Yes. You can use the "G" format specifier. For samples, see String.Format's documentation.
For example:
decimal value = 14.05m;
string result = String.Format("{0:G}", value); // "14.05"
value = 14m;
result = String.Format("{0:G}", value); // "14"
You could use something like:
FormatNumber(VariableToBeFormatted, 2).Replace(".00", String.Empty)
I don't think you'll be able to do that without some sort of conditional formatting, because you want the formatting to do different things in different cases.
If you'd settle for 14.5 instead of 14.50, then you'd be OK with the 0.## syntax, but I can't think of a way to do it.
Follow Reed's answer and add a check after that:
resultArray = result.Split('.');
if (resultArray.Length > 1 && resultArray[1].Length != 2)
result = String.Format("{0.00}", value);
Not exactly elegant, but will get you the result you desire.
This is assuming the person saying it doesn't apply to 14.5 is correct in the comments.

How to format a number as percentage without the percentage sign?

How do I in .NET format a number as percentage without showing the percentage sign?
If I have the number 0.13 and use the format string {0:P0} the output is 13 %.
However I would like to get 13 instead, without having to multiply the number by 100 and using the format string {0:N0}.
(Background: In ASP.NET I have a GridView with a BoundField where I would like to display a number as percentage but without the percentage sign (%). How do I do that?)
Thanks for the answers. At the time of editing 4 out of 6 suggest what I would like to avoid, as explained above. I was looking for a way to use a format string only, and avoid multiplying by 100 and using {0:N0}, but the answers indicate that's impossible...
Solved by using the accepted solution by Richard:
public class MyCulture : CultureInfo
{
public MyCulture()
: base(Thread.CurrentThread.CurrentCulture.Name)
{
this.NumberFormat.PercentSymbol = "";
}
}
Thread.CurrentThread.CurrentCulture = new MyCulture();
Define a custom culture with its own NumberFormatInfo which returns String.Empty for its PercentSymbol property.
Then use that custom culture for impacted pages (or for the whole application). This could be done by cloning from the default so other regional settings are preserved.
Why don't you just multiply the number by 100 and use your "{0:N0}" format string? That seems to me to be the easiest solution.
Unless you can come up with a viable reason why that's out of the question, that's my advice. It's not rocket science :-)
but multiplying by 100 is exactly what you want!
protected void myGrdiView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
myObjectType ot = (myObjectType)e.Row.DataItem;
ot.myNumber = ot.myNumber * 100; // multiply by 100
}
}
and in the HTML
<asp:BoundField DataType="myNumber" HeaderText="%" StringFormat="{0:N0}" />
The MSDN* has this under "Custom Numeric Format Strings":
The presence of a '%' character in a
format string causes a number to be
multiplied by 100 before it is
formatted. The appropriate symbol is
inserted in the number itself at the
location where the '%' appears in the
format string. The percent character
used is dependent on the current
NumberFormatInfo class.
But the example shows that it also outputs the % sign - not what you want, but perhaps settable to nothing via the NumberFormatInfo class?
However, I agree with Pax and can't see why do don't go with the * 100 and {0:N0}
**Accessing from within Visual Studio so no link*
How about this...
String.Format("{0:P0}",0.13).Replace("%","")
EDIT: This should work across cultures:
var percentSymbol = CultureInfo.CurrentCulture.NumberFormat.PercentSymbol;
String.Format("{0:P0}",0.13).Replace(percentSymbol,"")
There is also this solution which may be more elegant but slightly more code.
How about a trim?
double d = .102;
string percent = d.ToString("P0").Trim(' ', '%');
A points to consider first, a percentage displayed without a % is a number so lets ignore the percentage aspect. You want to know how to display a number that's 1 or less as 100 or less. I appreciate that it's bound so you can't modify it at display time so why not modify it at query time, i.e. SELECT (value*100) AS Percentage, ...?
You could also try something like
string newString = "0.13".Replace("0.", string.Empty) + "%";
Here is an example using NumberFormatInfo as #Richard suggested:
string.Format(new NumberFormatInfo { PercentSymbol = string.Empty }, "{0:0%}", 0.123); // => 12
Here is another shorter and cleaner way to do it.
$"{rate * 100:F2}"

Categories

Resources