How to write this simple program? converting to numbers???

  • Thread starter Thread starter Ron
  • Start date Start date
R

Ron

I want to calculate the surface area of a sphere from an inputed radius
with option strict on. I guess I am not converting something
correctly.

Here is what I am doing:
I have a textbox txtradius that I enter a radius into.

I then have a lable that I want the surface area to be displayed in
called lblsurface

here is my logic.

lblsurface.text = (4 * 3.14 * txtradius * txtradius)

I am getting a conversion error.
I dim txtradius as double
dim lblsurface as double

Thanks for any help
 
I then have a lable that I want the surface area to be displayed in
called lblsurface

here is my logic.

lblsurface.text = (4 * 3.14 * txtradius * txtradius)

I am getting a conversion error.
I dim txtradius as double
dim lblsurface as double

txtRadius is a textbox right?

In that case you should be doing:

Dim _Radius as Double = Ctype(txtRadiu.text, Double)
 
Ron said:
I want to calculate the surface area of a sphere from an inputed radius
with option strict on. I guess I am not converting something
correctly.
lblsurface.text = (4 * 3.14 * txtradius * txtradius)

You could boil all this down into a single statement, but here's the
long-hand way, so you can see all the conversions going on ...

Dim nRadius as Double = CDbl( txtRadius.Text )
Dim nArea as Double _
= 4 * Math.PI * Math.Pow( nRadius, 2 )

lblSurface.Text = nArea.ToString( "0.000" )

HTH,
Phill W.
 
here is what I have and it does not work.

Dim _Radius As Double = CType(txtRadius.Text, Double)
CDbl(lblsurface.Text, double) = 4 * 3.14 *
(CDbl(txtRadius.Text) * (CDbl(txtRadius.Text)))
lblVolume.Text = (4 / 3 * 3.14 * (CDbl(txtRadius.Text) *
(CDbl(txtRadius.Text) * (CDbl(txtRadius.Text)))))

still not working.
 
In the second line you put
CDbl(lblsurface.Text, double)
it should be
CDbl(lblsurface.Text)
or
CType(lblsurface.Text, double)
 
First, I would use doubles, I would use decimals.

dim decSurface as decimal =0d
dim decRadius as decimal =0d
const decPi as decimal = 3.14d
dim decResult as decimal =0

if decimal.tryparse(lblsurface.text,decSurface) then
else
endif

and so on

decResult = (decRadius ^3) * decSurface * 4/3
 
AMDRIT said:
First, I would use doubles, I would use decimals. .. . .
const decPi as decimal = 3.14d

Why use Decimals when all the Math methods return Doubles?
Why avoid using the Math library? The last time I looked, PI <> 3.14!

Regards,
Phill W.
 
Because

Dim dNumber1 As Decimal = Math.PI
Dim dNumber2 As Decimal = Math.PI ^ 2
Dim dNumber3 As Decimal = dNumber2 - dNumber1 + 5&
lblsurface.Text = dNumber3

is not the same as

Dim dNumber1 As Double = Math.PI
Dim dNumber2 As Double = Math.PI ^ 2
Dim dNumber3 As Double = dNumber2 - dNumber1
lblsurface.Text = dNumber3

and if you plan on reusing any of the numbers where they mean anything, then
I recommend decimals.
 
My apologies, that second dNumber3 should have read Dim dNumber3 As Double =
dNumber2 - dNumber1 + 5&
 
AMDRIT said:
Because

Dim dNumber1 As Decimal = Math.PI
Dim dNumber2 As Decimal = Math.PI ^ 2
Dim dNumber3 As Decimal = dNumber2 - dNumber1 + 5&
lblsurface.Text = dNumber3

is not the same as

Dim dNumber1 As Double = Math.PI
Dim dNumber2 As Double = Math.PI ^ 2
Dim dNumber3 As Double = dNumber2 - dNumber1
lblsurface.Text = dNumber3

and if you plan on reusing any of the numbers where they mean anything, then
I recommend decimals.

Strange, then, that Our Friends in Redmond seem satified with mere
Doubles for the Math methods... :-)

Regards,
Phill W.
 
I don't really know what you think you're doing with that bit of code but I
do think that you've lost the plot to some degree.

First of all, I'm going to shout this really loud because it's really
important:

TURN OPTION STRICT ON .. IT WILL SAVE YOU A LOT OF HEARTACHE

Now:

Dim _Radius As Double = CType(txtRadius.Text, Double)

This line is OK, but would be better written as:

Dim _Radius As Double = Double.Parse(txtRadius.Text)

Although CType(..., Double) will, quite happily, cast a value of almost any
type that represents a Double as a Double, Double.Parse is specaily designed
for converting a String that represents a Double into a Double.

CDbl(lblsurface.Text, double) = 4 * 3.14 * (CDbl(txtRadius.Text) *
(CDbl(txtRadius.Text)))

This line makes me cringe. You are converting txtRadius.Text to a Double
twice, but what you think you are doing with the result of the math entirely
escapes me.

The result of the math needs to be converted to a string and assigned to the
label so it becomes:

lblsurface.Text = (4 * 3.14 * (CDbl(txtRadius.Text) *
(CDbl(txtRadius.Text)))).ToString()

The multitude of parentheses is superfluous and an be removed:

lblsurface.Text = (4 * 3.14 * CDbl(txtRadius.Text) *
CDbl(txtRadius.Text)).ToString()

A variable for the radius has already ben 'computed so you should be using
that instead:

lblsurface.Text = (4 * 3.14 * _Radius * _Radius).ToString()

The nice epople at Microsoft have yet to remove the Exponation operator, (a
bit of sarcasm there), so use that instead. It has a higher precedence that
multiplication/division so there is still no need for any additional
parentheses:

lblsurface.Text = (4 * 3.14 * _Radius ^ 2).ToString()

At best, 3.14 is a very poor approxiamattion of PI and you want to be using
it only if you you were doing the calculation with pencil and papper, and
only then to save dealing with lots of decimal places. We have value for PI
with lots of precision so use that:

lblsurface.Text = (4 * Math.PI * _Radius ^ 2).ToString()

And again:

lblVolume.Text = (4 / 3 * 3.14 * (CDbl(txtRadius.Text) *
(CDbl(txtRadius.Text) * (CDbl(txtRadius.Text)))))

See the notes for the previous line:


lblVolume.Text = (4 / 3 * Math.PI * _Radius ^ 3).ToString()

So, to recap, the whole thing has become:

Dim _Radius As Double = Double.Parse(txtRadius.Text)

lblsurface.Text = (4 * Math.PI * _Radius ^ 2).ToString()

lblVolume.Text = (4 / 3 * Math.PI * _Radius ^ 3).ToString()

Note that the code has now been made more efficient and, at the same time,
much more readable.
 
Back
Top