Member 13893129 Ответов: 4

Как преобразовать десятичное значение 12.96 в формат времени как 00:13:36 в VB.NET


<pre>how to convert 12.96 Decimal value into time format as 00:13:36 in vb.net


Что я уже пробовал:

how to convert 12.96 Decimal value into time format as 00:13:36 in vb.net

4 Ответов

Рейтинг:
31

MadMyche

В то время как вы, возможно, вступает в десятичную, я думаю, что вы действительно хотите сделать, это построить промежутка времени в формате мм. СС.
Если это так, то вы можете рассматривать это десятичное число как (строку) Массив целых чисел, а затем построить TimeSpan от значения.
Этот образец является рудиментарным, но должен вывести вас на правильный путь

Sub Main()
    Console.WriteLine("Please enter a decimal number")
    Dim entry = Console.ReadLine().Trim()

    Dim DecimalCheck As Decimal = -1
    If (Decimal.TryParse(entry, DecimalCheck)) Then
        Dim TimeValues As String() = entry.Split(".")
        Dim TimeElements As Integer = TimeValues.GetUpperBound(0) + 1

        Dim OutputMinutes As Integer = 0
        Dim OutputSeconds As Integer = 0

        If (TimeElements > 0) Then
            Integer.TryParse(TimeValues(0), OutputMinutes)
            If (TimeElements > 1) Then
                Integer.TryParse(TimeValues(1), OutputSeconds)
            End If
        End If
        Dim OutputTime As TimeSpan = New TimeSpan(0, OutputMinutes, OutputSeconds)
        Console.WriteLine(String.Format("This calculates to: {0}", OutputTime))
    Else
        Console.WriteLine("Invalid decimal entered.")
    End If
    Console.WriteLine("Press ENTER to try again... or type EXIT and then press ENTER to exit")
    Dim Command = Console.ReadLine()
    If (Command.ToUpper().Contains("X")) Then
        Main()
    End If
End Sub


Рейтинг:
2

Patrice T

Цитата:
как преобразовать десятичное значение 12.96 в формат времени как 00:13:36 в vb.net

Наверное, то же самое, что и с любым другим языком. Это математическая задача.
Цитата:
Как написать код, чтобы получить 00:13.36 в качестве вывода

Проблема в том, что вы счастливо смешиваете десятичные значения, которые на самом деле являются ненормализованными значениями времени, со значениями времени, не ожидайте, что стандартные функции будут правильно справляться с этим. Вы должны создать код, который нормализует значения, прежде чем обрабатывать их как значения времени.
1 час с половиной записывается 1,5 часа в десятичной системе счисления или 1:30 во временном значении.
12.96 означает 12 минут + 96/100 минут, что составляет 12 минут 57 секунд и 60/100 секунды.
Если вы используете 12.96 для выражения 12 минут и 96 секунд, вы должны нормализовать значение, вы должны найти математику, чтобы нормализовать 12.96 до 13:36.


Member 13893129

Вы правы? Пожалуйста, объясните с помощью функциональных кодов.

0x01AA

+5

Patrice T

Спасибо

Рейтинг:
2

F-ES Sitecore

Сначала подумайте, как бы вы это сделали на бумаге. Посмотрите, сколько раз десятичную часть (96) можно разделить на 60, то есть сколько минут добавить. Затем возьмите остаток после того, как он был разделен на 60 (известный как модуль или mod), и это число секунд.

96 делится на 60 один раз, а 96 mod 60 равно 36, поэтому добавьте 1 к целой числовой части, дающей 13 часов, а 36-это секундная часть. Затем вы можете использовать конструктор DateTime, чтобы сделать дату из этих значений и использовать ToString, чтобы отформатировать ее так, как вам нравится.


Рейтинг:
2

phil.o

Это скорее математический вопрос, но у меня есть сомнения относительно вашей математики.
Вы берете десятичную часть (96) и хотите взять 60 из нее, чтобы сделать 13-ю минуту, а затем добавить оставшиеся 36 секунд?
12,96 минуты-это 12 минут плюс 96% минуты.

Может быть, лучше взять десятичную часть (0,96) и умножить ее на 60, чтобы получить число секунд (57,6).

И .Net не имеет еще лучшую сторону, за что: промежуток.Метод FromMinutes(Double) [^]. Вы можете найти примеры в VB.NET на этой странице.


Member 13893129

Дим ТТ как период = период.FromMinutes(Десятичное Число.Метод todouble(12.96))
выход : tt = 00:12:57:6000000

Как написать код, чтобы получить 00:13.36 в качестве вывода

phil.o

Позвольте мне задать вопрос:
Итак, 12.96-это 00:13:36.
Что такое 13.00?

Member 13893129

13.00-мин

phil.o

Итак, 12.96 (00:13:36) больше, чем 13.00 (00:13:00), когда-то превратившееся в промежуток времени?
Вы видите этот изъян?

Member 13893129

Если мы преобразуем десятичное значение 12.96 во временную форму, то я должен быть 13.36.
потому что 96-60 = 36, а оставшиеся 1 прибавляют к 12, что 13. так что очевидно, что это должно быть 13.36

phil.o

Я пытаюсь объяснить вам, что этот метод не является допустимым алгоритмом преобразования десятичных чисел в шестидесятеричные.
Итак, теперь вполне возможно, что 12.96-это не десятичное число минут, а просто минуты и секунды, Соединенные точкой (это то, что предполагает ваш расчет). В этом случае вы все еще можете использовать методы TimeSpan, такие как

Dim value as Double = 12.96
Dim minutes As Integer = CInt(Math.Floor(value))
Dim seconds As Integer = Cint((value - minutes) * 100)
Dim result As TimeSpan = TimeSpan.FromMinutes(minutes) + TimeSpan.FromSeconds(seconds)
Console.WriteLine(result.ToString("hh\:mm\:ss"))
Но в этом случае исходное значение не является "десятичным" значением.

Member 13893129

Ваша кодировка мала и сладка, но если мы введем 36.160, заменив 12.96, то она не будет показывать правильный вывод как 38.40

Patrice T

Вы должны сделать свой ум и выбрать, сколько цифр после десятичной точки. Различное количество цифр после десятичной точки делает другую математику и другой код.
В чем ваша разница между 36.160 и 36.16 ?

phil.o

На данный момент я не уверен, что ОП действительно заинтересован в понимании лежащей в основе математики :)
Но все равно спасибо за поддержку.

Member 13893129

Я получил результат после некоторых вычислений как 12.96, 13.160, 16.140 и т. д. Затем мне нужно преобразовать это значение в Min &SEC.

phil.o

Я получил результат после некоторых вычислений как 12.96, 13.160, 16.140 и т. д.
Наблюдение за тем, как они вычисляются, может помочь понять логику. Что же порождает эти ценности? Какой-то ваш код или внешнее устройство?