This question already has answers here:
C# is rounding down divisions by itself
(10 answers)
Closed 7 years ago.
I understand that a double is a decimal.
In the following program the output is 1 even though I thought it would be 1.05 repeating.
static void Main (string[] args)
{
double d = 19 / 18;
Console.WriteLine(d);
Console.ReadKey();
}
Am I misunderstanding double?
You are misunderstanding integer math.
Integer-19 / Integer-18 results in an Integer with value 1.
(that you assign the value to a double is not relevant. The calculation results in an Integer).
To fix it, use:
double d = 19.0 / 18.0;
Related
This question already has answers here:
How do you round a number to two decimal places in C#?
(15 answers)
How can I round a Decimal value upto a precision so that the total number of digits doesnot cross 15?
(2 answers)
Closed 8 months ago.
How can I limit a float to a defined amount of digits? Let's say I want a precision of 4, then it should be:
14.49193 -> 14.49
1.449193 -> 1.449
0.449193 -> 0.4492
0.000449193 -> 0.0004492
I resolved it with this method, there may be a smoother solution.
public static float LimitDigits(float val,int digits) {
if (val == 0) return 0;
return (float)((val<1.0)?Math.Round(val,digits+(int)Math.Floor(-(Math.Log10(val)))):Math.Round(val, Math.Max(0,digits-(int)Math.Floor((Math.Log10(val)+1)))));
}
This question already has answers here:
Why does integer division in C# return an integer and not a float?
(8 answers)
How can I divide two integers to get a double?
(9 answers)
Closed last year.
This post was edited and submitted for review last year and failed to reopen the post:
Original close reason(s) were not resolved
I feel it's a bug, is it?
decimal s = 30 / 9;
double w = 20 / 9;
Console.WriteLine(s);
Console.WriteLine(w);
and the result is
Is this normal, yes. Is this a bug, no.
You're doing integer math on 30 / 9 which is 3 and then assigning to a decimal which then does the conversion. Same with the second line.
Try this instead:
decimal s = 30m / 9m;
double w = 20.0 / 9.0;
Console.WriteLine(s);
Console.WriteLine(w);
That gives:
3.3333333333333333333333333333
2.2222222222222223
You need to declare your constants in your expression with the correct type. Suffix an m for decimal. And either provide a decimal place or suffix with a d for double.
This question already has answers here:
Why are floating point numbers inaccurate?
(5 answers)
Closed 2 years ago.
Decimal Value is 12568.521
When converting into float
(float)Value
Value is coming as 12568.5215. I need exact value as 12568.521. Please anyone guide me.
Try using Round in Math
decimal value = 12568.5215;
return Math.Round(value,3);
You may convert the decimal variable into a string:
decimal d = new decimal(12568.521);
float f = Single.Parse(d.ToString());
This question already has answers here:
How can I divide two integers to get a double?
(9 answers)
Closed 3 years ago.
I need to calculate x^y where both x and y are Doubles.
I tried using Math.Pow:
Double result = Math.Pow(24.69, 2/3);
The value of result is 1 where it should be 8.4790 ...
Any idea why?
For the exponent you are passing in 2 ints which is do integer division. So it is doing:
Math.Pow(24.69, 0)
To fix this use doubles like this:
Double result = Math.Pow(24.69, 2.0/3.0);
This question already has answers here:
Implicitly converting int to double
(8 answers)
Convert Double Value ToString() [duplicate]
(1 answer)
C# Calculations With Decimal Places
(5 answers)
Closed 5 years ago.
I'm trying to make a program to work out sin cos and tan for my uncle. i'm pretty new to c#. i made you have to type in three text boxes and it would then take the information and divide it and output the answer into a label but it would keep on rounding it off please help. here is my code:
int triA = Int32.Parse(enterA.Text);
int triB = Int32.Parse(enterB.Text);
int triHYP = Int32.Parse(enterHyp.Text);
Double sinAns = triA / triHYP;
Double cosAns = triB / triHYP;
Double tanAns = triA / triB;
sinAnswear.Text = sinAns.ToString();
cosAnswear.Text = cosAns.ToString();
tanAnswear.Text = tanAns.ToString();