Temperature Converter Problem

chinaboy

Member
Joined
May 12, 2007
Messages
5
Programming Experience
Beginner
Please help, I am having trouble getting my coding to work. I have a Private function to convert fahrenheit to celsius and have a click comand to display the results, but it does not work correctly.

PublicClass MainForm
PrivateFunction FahrenheitToCelsius(ByVal fahrenheit AsSingle) AsString
'convert fahrenheit to Celsius
Dim Celsius AsDouble
Celsius = (fahrenheit - 32) / 1.8
Return Celsius
EndFunction


PrivateSub calcButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcButton2.Click
Dim fahrenheit AsDouble

celsiusTextBox.Text = FahrenheitToCelsius(fahrenheit)
EndSub
 
Your types are wrong.

You should be consistent with the types. Make them all Double. The function should not be a string, as it is returning a Double value.

Textboxes can only display strings. Therefore you need to convert the Double value to a string.

Here is the corrected code:

Private Sub calcButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcButton2.Click
Dim fahrenheit As Double
celsiusTextBox.Text = FahrenheitToCelsius(fahrenheit).ToString
End Sub

Private Function FahrenheitToCelsius(ByVal fahrenheit AsDouble) As Double
'convert fahrenheit to Celsius
Dim Celsius As Double
Celsius = (fahrenheit - 32) / 1.8
Return Celsius
End Function
 
Last edited:
Solitaire

If you press this button on the Post Reply box:
switchmode.gif

then you can post code without it messing up the spacing

Also, have a read of http://www.vbdotnetforums.com/misc.php?do=bbcode - the section on
VB.NET:
 tags
 
I made the changes to the codes that Solitaire suggested but the results displays 17.7777777 regardless of Fahrenheit input by user. Currently the user enters the tempature in a textbox called "fahTextBox2". I'm sure it is something simple I am missing. Help please.

PublicClass MainForm
PrivateFunction FahrenheitToCelsius(ByVal fahrenheit AsDouble) AsDouble
'convert fahrenheit to Celsius
Dim Celsius AsDouble
Dim fahTextBox2 AsDouble
Celsius = (fahTextBox2 - 32) / 1.8
Return Celsius
EndFunction

PrivateSub calcButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcButton2.Click
Dim fahrenheit AsDouble

celsiusTextBox.Text = FahrenheitToCelsius(fahrenheit).ToString
EndSub
 
This may help:
VB.NET:
Option Explicit On 
Option Strict On

Friend Class TemperatureConv
    Private m_Celsius As Decimal
    Private m_Delisle As Decimal
    Private m_Fahrenheit As Decimal
    Private m_Kelvin As Decimal
    Private m_Newton As Decimal
    Private m_Rankine As Decimal
    Private m_Réaumur As Decimal
    Private m_Rømer As Decimal

    Friend Sub New()
        Call ClearVars()
    End Sub

    Private Sub ClearVars()
        m_Celsius = 0D
        m_Delisle = 0D
        m_Fahrenheit = 0D
        m_Kelvin = 0D
        m_Newton = 0D
        m_Rankine = 0D
        m_Réaumur = 0D
        m_Rømer = 0D
    End Sub

    Friend Enum TemperatureTypes
        Celsius = 0
        Delisle = 1
        Fahrenheit = 2
        Kelvin = 3
        Newton = 4
        Rankine = 5
        Réaumur = 6
        Rømer = 7
    End Enum

    Friend Sub CalcTemps(ByVal Temp As Decimal, ByVal TemperatureType As TemperatureTypes)
        Call ClearVars()
        Select Case TemperatureType
            Case TemperatureTypes.Celsius
                m_Celsius = Temp
                m_Delisle = CDec((100 - Temp) * 3 / 2)
                m_Fahrenheit = CDec(Temp * 9 / 5 + 32)
                m_Kelvin = CDec(Temp + 273.15)
                m_Newton = CDec(Temp * (33 / 100))
                m_Rankine = CDec(Temp * 9 / 5 + 491.67)
                m_Réaumur = CDec(Temp * 4 / 5)
                m_Rømer = CDec(Temp * 21 / 40 + 7.5)
            Case TemperatureTypes.Delisle
                m_Celsius = CDec((100 - Temp) * (2 / 3))
                m_Delisle = Temp
                m_Fahrenheit = CDec((212 - Temp) * (6 / 5))
                m_Kelvin = CDec((373.15 - Temp) * (2 / 3))
                m_Newton = CDec((33 - Temp) * (11 / 50))
                m_Rankine = CDec((671.67 - Temp) * (6 / 5))
                m_Réaumur = CDec((80 - Temp) * (8 / 15))
                m_Rømer = CDec((60 - Temp) * (7 / 20))
            Case TemperatureTypes.Fahrenheit
                m_Celsius = CDec((Temp - 32) * (5 / 9))
                m_Delisle = CDec((212 - Temp) * (5 / 6))
                m_Fahrenheit = Temp
                m_Kelvin = CDec((Temp + 459.67) * (5 / 9))
                m_Newton = CDec((Temp - 32) * (11 / 60))
                m_Rankine = CDec(Temp + 459.67)
                m_Réaumur = CDec((Temp - 32) * (4 / 9))
                m_Rømer = CDec((Temp - 32) * (7 / 24) + 7.5)
            Case TemperatureTypes.Kelvin
                m_Celsius = CDec(Temp - 273.15)
                m_Delisle = CDec((373.15 - Temp) * (3 / 2))
                m_Fahrenheit = CDec(Temp * (9 / 5) - 459.67)
                m_Kelvin = Temp
                m_Newton = CDec((Temp - 273.15) * (33 / 100))
                m_Rankine = CDec(Temp * (9 / 5))
                m_Réaumur = CDec((Temp - 273.15) * (4 / 5))
                m_Rømer = CDec((Temp - 273.15) * (21 / 40) + 7.5)
            Case TemperatureTypes.Newton
                m_Celsius = CDec(Temp - (100 / 33))
                m_Delisle = CDec((33 - Temp) * (50 / 11))
                m_Fahrenheit = CDec(Temp * (60 / 11) + 32)
                m_Kelvin = CDec(Temp * (100 / 33) + 273.15)
                m_Newton = Temp
                m_Rankine = CDec(Temp * (60 / 11) + 491.67)
                m_Réaumur = CDec(Temp * (80 / 33))
                m_Rømer = CDec(Temp * (35 / 22) + 7.5)
            Case TemperatureTypes.Rankine
                m_Celsius = CDec((Temp * (5 / 9)) - 273.15)
                m_Delisle = CDec((671.67 - Temp) * (5 / 6))
                m_Fahrenheit = CDec(Temp - 459.67)
                m_Kelvin = CDec(Temp * (5 / 9))
                m_Newton = CDec((Temp - 491.67) * (11 / 60))
                m_Rankine = Temp
                m_Réaumur = CDec((Temp * (5 / 9) - 273.15) * (4 / 5))
                m_Rømer = CDec((Temp - 491.67) * (7 / 24) + 7.5)
            Case TemperatureTypes.Réaumur
                m_Celsius = CDec(Temp * (5 / 4))
                m_Delisle = CDec((80 - Temp) * (15 / 8))
                m_Fahrenheit = CDec(Temp * (9 / 4) + 32)
                m_Kelvin = CDec(Temp * (5 / 4) + 273.15)
                m_Newton = CDec(Temp * (33 / 80))
                m_Rankine = CDec(Temp * (9 / 4) + 491.67)
                m_Réaumur = Temp
                m_Rømer = CDec(Temp * (21 / 32) + 7.5)
            Case TemperatureTypes.Rømer
                m_Celsius = CDec((Temp - 7.5) * (40 / 21))
                m_Delisle = CDec((60 - Temp) * (20 / 7))
                m_Fahrenheit = CDec((Temp - 7.5) * (24 / 7) + 32)
                m_Kelvin = CDec((Temp - 7.5) * (40 / 21) + 273.15)
                m_Newton = CDec((Temp - 7.5) * (22 / 35))
                m_Rankine = CDec((Temp - 7.5) * (24 / 7) + 491.67)
                m_Réaumur = CDec((Temp - 7.5) * (32 / 21))
                m_Rømer = Temp
        End Select
    End Sub

    Friend ReadOnly Property Celsius() As Decimal
        Get
            Return m_Celsius
        End Get
    End Property

    Friend ReadOnly Property Delisle() As Decimal
        Get
            Return m_Delisle
        End Get
    End Property

    Friend ReadOnly Property Fahrenheit() As Decimal
        Get
            Return m_Fahrenheit
        End Get
    End Property

    Friend ReadOnly Property Kelvin() As Decimal
        Get
            Return m_Kelvin
        End Get
    End Property

    Friend ReadOnly Property Newton() As Decimal
        Get
            Return m_Newton
        End Get
    End Property

    Friend ReadOnly Property Rankine() As Decimal
        Get
            Return m_Rankine
        End Get
    End Property

    Friend ReadOnly Property Réaumur() As Decimal
        Get
            Return m_Réaumur
        End Get
    End Property

    Friend ReadOnly Property Rømer() As Decimal
        Get
            Return m_Rømer
        End Get
    End Property
End Class

to use this:
VB.NET:
Dim Temps As New TemperatureConv
Temps.CalcTemps(TheTempValue, TemperatureConv.TemperatureTypes.Celsius)
txtFahrenheit.Text = Temps.Fahrenheit.ToString() 'This is the Fahrenheit temp based on the Celsius temp
 
VB.NET:
Dim fahTextBox2 AsDouble
Celsius = (fahTextBox2 - 32) / 1.8

Uhm.. Do you know what the difference is between a numerical string and a number?

Also, do you understand that if you declare a number variable with a similar name as a textbox variable, it wont actually automatically become the value of whetver the user typed in the textbox?
 
Back
Top