Extremely basic division equation not working in c# - c#

I can't get this to divide into a decimal. It is rounding to value 0.
private void button24_Click(object sender, EventArgs e)
{
double x = 0;
x = 1 / 2;
ans.Text = x.ToString();
}
When I debug, x is zero before it is sent to the textbox 'ans.'
I tried..and string variable is still zero..
double x = 1/5;
string displayX = x.ToString("0.0000");

It's integer division and those are the expected outputs.
double x = 1.0 / 5; // this will not perform integer division
double x = 1/5; // this does (1/5 = 0).
double x = 1D / 5; // this will not because 1 is treated as a double

You can do one of the follow:
double x = 1;
double y = 1.5;
double ans = x / y;

Replace double x = 1/5 with double x = 1.0/5 and that should fix it. Because both numbers you're dividing are integers, it still processes it as an integer, rather than as a double. When you think through logically, it makes some sense - it does the division in whatever form those numbers are and then saves it to the variable; the variable type is inconsequential to the actual equation.
(I realize there are other answers already, but hopefully this will help you see why the issue exists.)

Related

How many X fit into Y?

Given two numbers X and Y, how can I compute how many X's can fit into Y?
Good old division to the rescue!
float x = 16;
float y = 12345;
float howMany = ((float)y)/x; //> 771.5625
int floor = (int)howMany; //> 771
int ceil = (int)(howMany+0.5f);//> 772
Alliteratively, since you leave us guessing, you may want:
int lenX = "16".Length;
int lenY = "12345".Length;
float howMany = (float)lenY/lenX; //> 2.5
There are two ways your question could be interpreted.
(1) How many fractional X's can fit into Y?
In mathematics, the answer to this question is Y / X. In a programming language, if X and Y are integer values, you'll have to take care to cast them to floating point values before performing the division.
When X and Y are integers
int X = 5;
int Y = 17;
double N = (double)Y / (double)X;
// N is 3.4
When X and Y are real numbers
double X = 2.5;
double Y = 11.5;
double N = Y / X;
// N is 4.6
(2) How many whole X's can fit into Y?
In mathematics, the answer to this question is ⌊Y / X⌋, the floor of Y divided by X. In a programming language, if X and Y are integer values, the / operator applied to them will typically perform integer division. Integer division discards the remainder of division, so you don't have to call any floor function.
When X and Y are integers
int X = 5;
int Y = 17;
int N = Y / X;
// N is 3
When X and Y are real numbers
double X = 2.5;
double Y = 11.5;
int N = (int)Math.Floor(Y / X);
// N is 4

making double variables lower than 1

in my ASP.NET project i did a survey page that uses Application to save the votes. I have a problem with the making of the percentages amount. I've tried many things. here is the problematic part of my code:
double x = (count / sum) ;
double f = (count1 / sum) ;
double g = (count2 / sum) ;
double h = (count3 / sum) ;
if (sum > 0)
{
a = (int)x * 100;
b = (int)f * 100;
c = (int)g * 100;
d = (int)h * 100;
}
I used breakpoints and figured out that the problem was in the double variables: the (count/sum) equals 0 anyway.
I'm assuming count and sum are integer types.
The result of division of 2 integers is a truncated integer.
You need to cast one side of the division to a double, then the result will be double
So
((double)count)/sum
What are the datatypes of count, count[1-3] and sum? If they are integral types, then integer division is performed. This
int x = 100 ;
int y = 300 ;
double z = x / y ;
yields the value 0.0 for z.
Try something like
double h = (double) ( count3 / sum ) ;
You might also want to move your test for sum > 0 up: as coded, if sum is zero, you'll throw a DivideByZeroException before you get to your test, thus rendering your test moot.
Your count and sum variables are probably integers. Cast one of them to double:
double x = count / (double)sum;
UPDATE:
Actually, if you want the percentage as an integer, you can skip the doubles altogether:
int a = 100 * count / sum;

C# Floating Point Accuracy

Trying to create a Mandelbrot set, I have been trying to using 8 and 15 digit floating point variables in my program, and have run into an issue: the double approximates to 0. I tried unit testing and wrote this code to isolate the issue. Using the variable viewer, the h and w values both were on 0.0, as opposed to 0.00185185185185 and 0.0015625, yet when I just write double h = 0.0015625, it works.
Many thanks for assistance.
int apparentwidth = 3;
int apparentheight = 2;
int height = 1080;
int width = 1920;
double w = (apparentwidth / width);
double h = (apparentheight / height);
Console.WriteLine(w);
Console.WriteLine(h);
You're dividing two int variables, and the result is an int. You're storing the result in a double, but the scale (portion after the decimal) has already been lost.
Use double throughout:
double apparentwidth = 3;
double apparentheight = 2;
double height = 1080;
double width = 1920;
double w = (apparentwidth / width);
double h = (apparentheight / height);
Or cast one of the variables to a double when dividing:
double w = ((double)apparentwidth / width);
double h = ((double)apparentheight / height);
You are doing integer division on accident.
double w = (double)apparentwidth / (double)width;
double h = (double)apparentheight / (double)height;
Just to provide further explanation to the other answers:
When you do mathematical operations on ints, the result is an int, and this is achieved by effectively truncating the non-integer portion:
3 / 2 == 1
When an operation is performed involving at least one double, the int input is first converted to a double, so the result is a double:
1.0 / 4 == 0.25
4 * 0.25 == 1
And of course, if both inputs are double the result is double and no implicit conversion occurs:
1.0 / 4.0 == 0.25

C# one number before floating point

I need to somehow get one number before floating point and value after that floating point. Example:
Before: 212.12345;
After: 2.12345
Any Ideas?
Assuming you have:
decimal x = 212.12345m;
you can use the modulo operator:
decimal result = x % 10;
Note that the number should be represented as a decimal if you care about the accurate value.
See also: Meaning of "%" operation in C# for the numeric type double
You can do like this:
public double GetFirst(double a)
{
double b = a / 10.0;
return (b - (int)b) * 10.0;
}
try this
double x = 1;
var y = x/10;
var z = (y % (Math.Floor(y))) * 10;
Try this code
string num = "15464612.12345";
string t = num.Split('.')[0];
num = t[t.Length-1].ToString() + "." + num.Split('.')[1];
my approach was to find the number 210, and substract it....
will work for any number as well as smaller then 10.
double f1 = 233.1234;
double f2 = f1 - (((int)f1 / 10) * 10);

Why do these division equations result in zero?

The result of all of the division equations in the below for loop is 0. How can I get it to give me a decimal e.g.:
297 / 315 = 0.30793650793650793650793650793651
Code:
using System;
namespace TestDivide
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i <= 100; i++)
{
decimal result = i / 100;
long result2 = i / 100;
double result3 = i / 100;
float result4 = i / 100;
Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})", i, 100, i / 100, result, result2, result3, result4);
}
Console.ReadLine();
}
}
}
Answer:
Thanks Jon and everyone, this is what I wanted to do:
using System;
namespace TestDivide
{
class Program
{
static void Main(string[] args)
{
int maximum = 300;
for (int i = 0; i <= maximum; i++)
{
float percentage = (i / (float)maximum) * 100f;
Console.WriteLine("on #{0}, {1:#}% finished.", i, percentage);
}
Console.ReadLine();
}
}
}
You're using int/int, which does everything in integer arithmetic even if you're assigning to a decimal/double/float variable.
Force one of the operands to be of the type you want to use for the arithmetic.
for (int i = 0; i <= 100; i++)
{
decimal result = i / 100m;
long result2 = i / 100;
double result3 = i / 100d;
float result4 = i / 100f;
Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})",
i, 100, i / 100d, result, result2, result3, result4);
}
Results:
0/100=0 (0,0,0, 0)
1/100=0.01 (0.01,0,0.01, 0.01)
2/100=0.02 (0.02,0,0.02, 0.02)
3/100=0.03 (0.03,0,0.03, 0.03)
4/100=0.04 (0.04,0,0.04, 0.04)
5/100=0.05 (0.05,0,0.05, 0.05)
(etc)
Note that that isn't showing the exact value represented by the float or the double - you can't represent 0.01 exactly as a float or double, for example. The string formatting is effectively rounding the result. See my article on .NET floating binary point for more information as well as a class which will let you see the exact value of a double.
I haven't bothered using 100L for result2 because the result would always be the same.
Try
i / 100.0
because i is an int: i / 100 performs integer division, then the result, that is always 0, is casted to the target type. You need to specify at least one non-int literal in your expression:
i / 100.0
Because i is an integer and 100 is an integer...so you have an integer division
Try (decimal)i / 100.0 instead
No matter where you store it, an integer divided by an integer will always be an integer.
You need to force a floating point operation "double / double" instead of an "int / int"
double result = (double)297 / (double)315 ;
this is integer division whatever the type of variable you storing in,
so int / int = int
double result3 = ((double)i) / 100;
Because i is a int value and you divide by an integer so the result is an integer ! and so you need to divide by 100.0 to have an implicit cast in float or specify 100f or 100d
In my case I had only vars and no int
float div = (var1 - var2) / float.Parse(var1.ToString());

Categories