how to convert from double to exponential notation in c# [duplicate] - c#

This question already has an answer here:
C# how to convert a double to string with exponential notation
(1 answer)
Closed 6 years ago.
How to convert double number to exponential notation in c#?
My number
I would like number will look like:
-1.6500000000000000e1
I looks on the article:
C# how to convert a double to string with exponential notation
But this didn't fully answer me:
number.ToString("e16", CultureInfo.InvariantCulture)
provide me number looks like:
-1.6500000000000000e+001
I would like at the end only e1 for non negative, or e-1 for negative
Thanks!

Try using formatting:
Double value = -1.6500000000000000e1;
// e15 - exponential form, small "e" for exponent, 16 digits
String result = value.ToString("e16", CultureInfo.InvariantCulture);
Console.Write(result);
Edit: in case you want "e1" form of exponent, you should specify it like this:
String result = value.ToString("0.0000000000000000e0", CultureInfo.InvariantCulture);

Related

Problem in converting string into double in C# [duplicate]

This question already has answers here:
String to decimal conversion: dot separation instead of comma
(8 answers)
Closed 6 months ago.
I need a program that takes two inputs from the user and perform a calculation. Those inputs need to be double datatype.
The problem I'm facing is that: the program receives a decimal value with dot separator, but when converting it to double, it loses the decimal value. For example, input from the user is 2.5, but when converting it becomes 25.
When the user type 2,5 it is correctly converting it to 2.5
Here's my code example:
Console.WriteLine("Var1: ");
string? v1 = Console.ReadLine();
Console.WriteLine("Var2: ");
string? v2 = Console.ReadLine();
double v1Double = Double.Parse(v1);
double v2Double = Double.Parse(v2);
Console.WriteLine($"Var1: {v1Double}");
Console.WriteLine($"Var2: {v2Double}");
Console.WriteLine($"Multiplication: {v1Double * v2Double}");
Here's what I'm getting when with dot separator:
Here's what I'm gettig when comma separator:
Can anyone help me how to address this problem?
You could use NumberFormatInfo for this problem like so:
NumberFormatInfo provider = new NumberFormatInfo();
provider.NumberDecimalSeparator = ".";
provider.NumberGroupSeparator = ",";
double doubleVal = Convert.ToDouble(YOUR_STRING, provider);

How to hide fractional part if it is zero? [duplicate]

This question already has answers here:
How do I format a double to a string and only show decimal digits when necessary?
(2 answers)
Closed 9 years ago.
How to hide fractional part of a double or float number if it is all zero. I am converting a floating point number to string and its display Mantissa part even if it is zero. For example:
double number = 123.00;
string strNumber = number.ToString(); // it shows "123.0", what I need is only "123"
double secondNumber = 123.2234;
string strSecondNumber = secondNumber.ToString(); // it shows "123.2234" as needed.
Is there any built-in solution in .NET to get it done?
Thanks
Try using the overload of double.ToString() that takes in a format string, and pass it "R":
double number = 123.00;
string strNumber = number.ToString("R");
double secondNumber = 123.2234;
string strSecondNumber = secondNumber.ToString("R");

How to trim decimal? [duplicate]

This question already has answers here:
Truncate Decimal number not Round Off [duplicate]
(10 answers)
Closed 9 years ago.
I have a decimal number :
decimal a = 0.8537056986486486486486486486;
I want to show it as string with only 8 digit after point :
a equals -> "0.85370569".
How can I do it ?
For example, like this:
a.ToString("0.00000000");
Try using
a.ToString("D8");
This should convert it to the correct format.
Edit:
As said in the comments, D is only used for integral types, thus not for decimals and such.
Use
static void Main(string[] args)
{
decimal d = (decimal)0.8537056986486486486486486486;
Console.WriteLine(d.ToString("N8"));
Console.ReadLine();
}
instead.
This will format it to 0.85370570
To perform this numerically you could use:
decimal a = (decimal) 0.8537056986486486486486486486;
String test = (Math.Truncate(100000000 * a) / 100000000).ToString();
decimal a = 0.8537056986486486486486486486;
var v= a.ToString("#.########");

Convert String into Double - Result is failing [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Reading a double value from a string
I have a problem with converting my String into a double, I always get strange results.
I want to convert the following string:
string Test = "17828.571428571";
I tried it like this (because it normally works):
Double _Test = Convert.ToDouble(Test);
Result is: 17828571428571 (without the dot, lol)
I need it as a double, to Math.Round() afterwards, so I have 17828 in my example.
My second idea was to split the string, but is that really the best method? :S
Thanks for helping me!
Finn
Use InvariantCulture
Double _Test = Convert.ToDouble(Test,CultureInfo.InvariantCulture);
EDIT: I believe your current culture is "German" de-DE, which uses , for floating point.
Tried the following code. You may also use NumberFormatInfo.InvariantInfo during conversion.
string Test = "17828.571428571";
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
double d = Convert.ToDouble(Test);
double d2 = Convert.ToDouble(Test, CultureInfo.InvariantCulture);
double d3 = Convert.ToDouble(Test, NumberFormatInfo.InvariantInfo);
string Test2 = "17828,571428571"; //Notice the comma in the string
double d4 = Convert.ToDouble(Test2);
Console.WriteLine("Using comma as decimal point: "+ d4);
Output: (Notice the comma in the output)
Wihtout Invariant: 17828571428571
With InvariantCulture: 17828,571428571
With NumberFormatInfo.InvariantInfo: 17828,571428571
Using comma as decimal point: 17828,571428571
double _Test = double.Parse(Test,CultureInfo.InvariantCulture);
You need to set the format provider of the conversion operation to invariant.
Try Double.TryParse or Double.Parse if you are sure there is the correct format
EDIT: But take care of the format. as example if you are german you need to type 140,50 and not 140.50 because 140.50 would be 14050.
Or you pass as parameter that you dont care of culture (see other posts).

parsing float into string

I have a number like so: 4.47778E+11
Can anyone give me a way of converting that into its number representation easily in c#?
Thanks
string s = "4.47778e+11";
double d = double.Parse(s);
or
string s = "4.47778e+11";
if (double.TryParse(s,out d))
{
// number was parsed correctly
}
or for internationalization
double.Parse("4.47778e+11", System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
Try this MSDN thread. It's called scientific notation by the way, and a quick google normally solves simple issues.
That's assuming you mean parsing from a string to a float, your question & title are conflicting
Use
float num = Convert.ToFloat(Convert.ToDouble(s));
But you still lose precision, floats are only precise to 7 digits, so you're better off using just the Convert.ToDouble() (precise to 15 or so digits), so you won't lose any digits in your example.
Use Convert:
double value = Convert.ToDouble("4.47778E+11");

Categories