what's wrong with float ?

  • Thread starter Thread starter Sasi
  • Start date Start date
S

Sasi

create a J# windows applicaion.add a button , a label and two textboxes to
form and paste this code into the buttons event handler:

private void button1_Click(Object sender, System.EventArgs e)
{
label1.set_Text(Float.toString(
Float.parseFloat(textBox1.get_Text())
*
Float.parseFloat(textBox2.get_Text())
));
}

when you run the project and test it with 3 and 6.7 ; you get freaking
result of "20.0999985" in the label instead of "20.1" .if try 3 and
6.71,you'll get "20.1300011" instead of "20.13" .

what the hell is wrong with J# float numbers?
 
Sasi said:
create a J# windows applicaion.add a button , a label and two textboxes to
form and paste this code into the buttons event handler:

private void button1_Click(Object sender, System.EventArgs e)
{
label1.set_Text(Float.toString(
Float.parseFloat(textBox1.get_Text())
*
Float.parseFloat(textBox2.get_Text())
));
}

when you run the project and test it with 3 and 6.7 ; you get freaking
result of "20.0999985" in the label instead of "20.1" .if try 3 and
6.71,you'll get "20.1300011" instead of "20.13" .

what the hell is wrong with J# float numbers?

Nothing. What's wrong is your expectations of binary floating point
numbers.

See http://pobox.com/~skeet/csharp/floatingpoint.html

Note that it has little to do with J#, either - the following C#
application (complete - no need for a UI etc) demonstrates the same
behaviour.

using System;

class Test
{
static void Main()
{
float f1 = 3.0f;
float f2 = 6.7f;

float f3 = f1*f2;

Console.WriteLine (f3.ToString("r"));
}
}

Without the "r" format specifier, you'll *think* you've got the
"correct" answer because by default .NET doesn't show you all the
information it's got; the Java formatting defaults to a more precise
form.
 
cool.
I ran your sample and noticed that if I omit "r" modifier i'll get the
result which is desired for me.
how can i do the same in J# ?
 
cool.
I ran your sample and noticed that if I omit "r" modifier i'll get the
result which is desired for me.
how can i do the same in J# ?

You'll need to look at the float formatting options of Java, which I
can't remember off-hand. However, just because it happens to be what
you want this time doesn't mean it always will be. You need to cope
with the fact that your result really *isn't* 20.1.

Jon
 
Back
Top