Преобразуйте числа в часы

#vb.net #winforms

Вопрос:

Я пытаюсь сделать простой калькулятор «общего количества отработанных часов».

У меня есть текстовое поле, в котором я хочу написать, скажем 1.30 , 1 час 30 минут. У меня есть другое текстовое поле , куда я бы поместил то же 1.30 самое, а затем я хочу добавить их в ярлык и показать 3 часа.

Однако я не могу найти правильный код для преобразования чисел в часы, и вместо этого он показывает 2.6. Как я могу заставить его показывать 3 часа?

Вот мой код

 Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = Val(TextBox1.Text)   Val(TextBox2.Text)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Text = My.Settings.SaveTextBox()
    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        My.Settings.SaveTextBox = TextBox1.Text()
    End Sub
End Class
 

Комментарии:

1. Вы уверены, что хотите принять 1.30 hours участие в качестве вклада? Я бы подумал 1:30 или 1.5 лучше представлял то время. Если строка hours должна быть во входных данных, то вы также хотите обработать minutes 90 minutes ее ?

2. В вашем мире 2,6 часа = 3 часа. Поэтому, где бы вы ни проводили это преобразование, вам нужно преобразовать .6 в 1. Вы упускаете это

3. 1.3 Равно ли 1.30 это или 1.03 ?

Ответ №1:

Использование a NumericUpDown избавит вас от необходимости проверять, действительно ли пользователь ввел номер в текстовое поле. Установите NumericUpDownMinutes максимальное значение 59 в окне свойств. PadLeft Добавляет начальный ноль к однозначным минутам.

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Hours = NumericUpDownHours.Value.ToString
    Dim Minutes = NumericUpDownMinutes.Value.ToString
    lblTotal.Text = $"{Hours}.{Minutes.PadLeft(2, "0"c)}"
End Sub
 

Чтобы получить округленные часы

 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim Hours = NumericUpDownHours.Value
    Dim Minutes = NumericUpDownMinutes.Value
    Dim RoundedHours = CInt(Hours   Minutes / 60)
    lblRoundedTotal.Text = RoundedHours.ToString
End Sub
 

Комментарии:

1. Тх, теперь это работает.