Sasi <Sa**@discussions.microsoft.comwrote:
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.
--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog:
http://www.msmvps.com/jon.skeet
World class .NET training in the UK:
http://iterativetraining.co.uk