Contafono

Tengo el siguiente problema estoy haciendo un programa que
dado la hora inicial al hacer click vuelve a tomar las horas
las resta y da el tiempo total como un cronometro pero quiero
multiplicar esos minutos por un numero, ejemplo 10 minutos los
multiplico por 3.64 como numero entero o real(float), así si cada minuto vale
3,63 centavos me dan los centavos trascurridos 10 minutos
pero el resultado que me da me lo da en tiempo 0:0:36.4
al pasarlo de tiempo a cadena y de cadena a entero y luego de entero a cadena
y tratar de mostrarlo en un memo me lanza error me dice que el formato 0:0:36.4 no es un formato válido
de entero o flotante
¿Cómo lo puedo hacer?
Es para controlar el gasto telefónico.

2 Respuestas

Respuesta
1
No entiendo muy bien el porque de que tienes que convertir de cadena a entero y viceversa. Si yo almaceno en un single el valor de un minuto y en otro single el valor del tiempo sale bien.
Ej:
Dim tiempo As Single, a As String, contador As Integer
Dim valor As Single, TiempoTranscurrido As Single
tiempo = Timer
valor = 3.63
For contador = 1 To 30000
a = a + "A"
Next
TiempoTranscurrido = Timer - tiempo
MsgBox TiempoTranscurrido * valor
En mi ordenador devuelve 2,795
Ese formato que me dices no es un numero sino una hora. Trata de convertirla a numero a antes de hacer la operación.
Respuesta
1
Teóricamente ya te envíe algo pero PARECE que no te llegó, acá va otra vez
Fíjate si te sirve este ejemplo
//Esta es la Unit
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls;
type
TForm1 = class(TForm)
Inicio: TDateTimePicker;
Final: TDateTimePicker;
Calcular: TBitBtn;
Edit1: TEdit;
Function CuentaTelefonica(Inicio, Final : Ttime; PrecioMinuto: Real): Real;
procedure CalcularClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CalcularClick(Sender: TObject);
begin
ShowMessage(FormatFloat('"$" 0.00', CuentaTelefonica(Inicio.Time, Final.Time, 3.63) ) );
end;
Function TForm1.CuentaTelefonica(Inicio, Final : Ttime; PrecioMinuto: Real): Real;
Var
Minutos : Real;
Begin
//Una fecha (N° Real) se divide en dos partes
//La Parte Entera que Indica la Fecha y
//la Parte Fraccionaria que Indica la Hora y
//un Minuto es en real 0.000694444444444444 para ser exactos
//Remuevo la Parte de la Fecha Usa este Metodo ya que otro te puede
//Arrastrar error en la parte fraccionaria
Inicio := Inicio - Trunc(Inicio);
Final := Final - Trunc(Final);
Minutos := (Final - Inicio) / 0.000694444444444444;
CuentaTelefonica := Minutos * PrecioMinuto;
End;
end.
//Este es el Form (.DFM)
object Form1: TForm1
Left = 189
Top = 146
Width = 291
Height = 123
Caption = 'Calculo de costo segun tiempo'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Inicio: TDateTimePicker
Left = 43
Top = 20
Width = 70
Height = 21
CalAlignment = dtaLeft
Date = 37204
Time = 37204
DateFormat = dfShort
DateMode = dmComboBox
Kind = dtkTime
ParseInput = False
TabOrder = 0
end
object Final: TDateTimePicker
Left = 118
Top = 20
Width = 70
Height = 21
CalAlignment = dtaLeft
Date = 37204.0013888889
Time = 37204.0013888889
DateFormat = dfShort
DateMode = dmComboBox
Kind = dtkTime
ParseInput = False
TabOrder = 1
end
object Calcular: TBitBtn
Left = 104
Top = 55
Width = 75
Height = 25
Caption = 'Calcular'
TabOrder = 2
OnClick = CalcularClick
end
object Edit1: TEdit
Left = 195
Top = 20
Width = 45
Height = 21
BiDiMode = bdLeftToRight
ParentBiDiMode = False
TabOrder = 3
Text = '3.63'
end
end
DX

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas