Avatar billede mnc Nybegynder
23. januar 2007 - 11:02 Der er 14 kommentarer og
1 løsning

string.format til Form.Text

Jeg sidder og arbejder med et program, som skal vise en nedtælling til når programmet skal udføre en ønsket handling. Dette har jeg liggende i et timespan, og jeg har en timer event med Interval sat til 1000. Når jeg så udskriver mit timespan får jeg (eksempelvis) "00:00:57.0021450" (57 sek).

Hvordan får jeg decimalerne væk, uden at den eksempelvis skriver 45.0193856 sekunder som 45 og 43.9284757 som 43, men istedet 45 og 44?
Var selv ude i en string.format, men det kunne jeg ikke lige få til at virke som ønsket.


mnc
Avatar billede Slettet bruger
23. januar 2007 - 11:57 #1
På dit timespan object kan du sige .Seconds og få det antal sekunder ud der er tilbage
Avatar billede mnc Nybegynder
23. januar 2007 - 12:24 #2
Som jeg forstår dig, så er du ude i

string.Format("{0}:{1}:{2}",
  _timeLeft.Hours,
  _timeLeft.Minutes,
  _timeLeft.Seconds
);


Har prøvet
this.Text = String.Format("{0} - {1}", _timeLeft.Seconds, _timeLeft.ToString());
og den siger så eks.
57 - 57.0909301
55 - 55.9849592
54 - 54.8995827
Avatar billede Slettet bruger
23. januar 2007 - 12:33 #3
Okay, så du skal altså bare rounde op nu?
Avatar billede Slettet bruger
23. januar 2007 - 12:34 #4
eller er jeg ikke med? :P
Avatar billede mnc Nybegynder
23. januar 2007 - 12:38 #5
Idet .Seconds o.l. returnerer en integer, så sørger den selv for at runde af... Dog ikke på den mest hensigtsmæssige måde, in my oppinion.
Avatar billede mikkel_sommer Nybegynder
23. januar 2007 - 12:39 #6
du kan lægge 0.5 til og derefter fjerne alt efter kommaet.
Avatar billede Slettet bruger
23. januar 2007 - 12:40 #7
du kan bare afrunde _timeLeft selv

Math.Round(_timeLeft, 0);
Avatar billede mnc Nybegynder
23. januar 2007 - 14:00 #8
mikkel_sommer: jeg er ikke sikker på hvordan du mener, ej heller om det er den 'rigtige' måde at gøre det på.

wb-freekill: Jeg kan ikke afrunde et objekt. Og jeg havde i forvejen kigget på Round.
Avatar billede Slettet bruger
23. januar 2007 - 14:03 #9
gør det at du på dit timespan tager millisec, ganger med 1000 på en double, så har du sekunder, og afrund det med Math.Round
Avatar billede mikkel_sommer Nybegynder
24. januar 2007 - 08:52 #10
Double secs = Double.Parse(_timeLeft.ToString());
secs += 0.5;
string seconds = secs.ToString().SubString(0, secs.IndexOf("."));
Avatar billede Slettet bruger
24. januar 2007 - 14:09 #11
Virkelig en sovsekode løsning det der...
Avatar billede mnc Nybegynder
25. januar 2007 - 09:29 #12
Det var også min umiddelbare tanke da jeg læste hans første kommentar, selvom jeg ikke vidste 100% hvad han mente.
Er ved at refaktorere koden lidt nu, og få alle tingene til at virke fuldt ud. Så må de visuelle detaljer (såsom this.Text) lige vente lidt.. Tror at jeg ender med at bruge din løsning, men det vil tiden vise.
Avatar billede arne_v Ekspert
27. januar 2007 - 05:09 #13
en format og de 3 properties en en udmærket løsning

et alternativ er:

(new DateTime(ts.Ticks)).ToString("HH:mm:ss")

eller:

(new DateTime(ts.Ticks + 5000000)).ToString("HH:mm:ss")

men det kan godt være de kræver en lille kommentar i koden !
Avatar billede mnc Nybegynder
25. februar 2007 - 18:40 #14
Dette projekt har stået lidt stille, men jeg bruger nu arnes løsning. Smid et svar. :)
Avatar billede arne_v Ekspert
27. februar 2007 - 02:18 #15
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester