Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


If-sats problem

Postades av 2010-05-03 09:43:09 - Benni Svensson, i forum c# (c-sharp), Tråden har 10 Kommentarer och lästs av 2270 personer

I en applikation som jag gör för jobbet så har jag fastnat i en if-sats, där jag skall ta fram rester
beroende på arbetstid.
<code>
if (start == "07:00" && slut == "15:45")
rast =Convert.ToDecimal("0,45");
else if (start == "07:00" && slut == "11:45")
rast = Convert.ToDecimal("0,15");
else if (start == "07:00" && slut == "14:00")
rast = Convert.ToDecimal("0,45");
else if (start == "07:00" && slut == "11:15")
rast = Convert.ToDecimal("0,15");

</code>
start och slut är sting. Mitt problem är att jag skulle vilja ha med
<code>
if (start == "07:00" && slut >= "15:45")
</code>
..men då blir det fel.
Jag har försökt med andra datatyper, decimal datetime, men jag får inte till det.
Jag vore väldigt tacksam om någon ville hjälpa mig här.

Om jag gör så här:
<code>
if(full >=8)
rast = Convert.ToDecimal("0,45");
else if (full >=7 && full < 8)
rast = Convert.ToDecimal("0,45");
else if (full <= 5 && full < 4)
rast = Convert.ToDecimal("0,15");
else if (full <= 4 && full < 3)
rast = Convert.ToDecimal("0,15");
else
rast = Convert.ToDecimal("0");

return dTotal - rast;
</code>
if vi då säger att full = 4 så visar sig resultatet som 415. Inte ett tätt alls ???


Svara

Sv: If-sats problem

Postades av 2010-05-03 10:22:00 - Oskar Johansson

testa med timespan


Svara

Sv:If-sats problem

Postades av 2010-05-03 10:28:53 - Benni Svensson

Hej oscar, jo jag har försökt men jag får inte ihop det :-(


Svara

Sv: If-sats problem

Postades av 2010-05-03 10:31:06 - Sven Åke Persson

Okunskap.
Finns det inte Select Case i C#

Ditt problem är ett typiskt exempel på där Select Case är helt perfekt.
Se gärna på gamla program Skeppsklocka och porta till C#

Programarkivet:Skeppsklocka Tidvakt


Svara

Sv: If-sats problem

Postades av 2010-05-03 11:36:38 - Johan Djupmarker

Jag tror att du tänkt lite fel i dina if-satser.

else if (full <= 4 && full < 3)

Betyder "Om full är mindre än eller lika med 4 samt även mindre än 3 så". I praktiken mindre än 3 alltså. Gissar du vänt "gapet" och egentligen vill ha:

else if (full <= 4 && full > 3)

Eftersom du kommer in i else-satsen så blir rast=0 i ditt exempel.

En annan sak, du bör inte konvertera sträng till decimal "i onödan", risk för problem vid andra nationella inställningar. Istället för:
rast = Convert.ToDecimal("0,15");
bör du göra såhär:
rast = 0.15;

Johan


Svara

Sv:If-sats problem

Postades av 2010-05-03 20:17:41 - Benni Svensson

Jo tror nog att jag har snärjt in mig här,
<code>
decimal dTotal = full;
decimal rast = 0;
if(full >=8)
rast = 0.45M;
else if (full >=7 && full < 8)
rast = 0.45M;
else if (full >= 6 && full < 7)
rast = 0.45M;
else if (full >= 5 && full < 6)
rast = 0.15M;
else if (full >= 4 && full < 5)
rast = 0.15M;
else if (full >= 3 && full < 4)
rast = 0.15M;
else
rast = 0;
return dTotal - rast;
</code>

Om jag har en person vars ordenarie arbetstid är 07:00-11:15.
Om han nu slutar 12:15 eller 13:15 då fungerar det, men slutar han 12:45 då minskars inte timmarna
med rasten de lägs ihop. Konstigt?


Svara

Sv: If-sats problem

Postades av 2010-05-03 20:59:06 - Johan Djupmarker

Jag är inte riktigt med på förväntad funktion. Vilket värde har full, vilket returvärde förväntar du dig och vilket får du?

Johan


Svara

Sv:If-sats problem

Postades av 2010-05-03 21:45:13 - Benni Svensson

Jag har nog varit lite otydlig. Detta handlar om tidsrapportering.
Jag tar fram normaltiderna till en gridview där det framgår vilka tider som man har kommit överens om t ex 07:00 - 11:15 , det finns flera konstiga tider. Vad jag då skall räkna ut är den korrekta arbetstiden
- rast.
Jag börjar så här:
<code>
sArbetsTid = objDR["arbetstid"].ToString();//detta är tiden hämtat ifrån databasen och sparat i string("07:00-11:15").
//följande styke är jag väldigt osäker på, jag tror att jag har gjort rätt.
char[] separator = { '-' };
string[] sBaTid = sArbetsTid.Split(separator);
startTid = DateTime.ParseExact(sBaTid[0].Replace(":", "."), TimeFormat, CultureInfo.InvariantCulture);
sluttTid = DateTime.ParseExact(sBaTid[1].Replace(":", "."), TimeFormat, CultureInfo.InvariantCulture);
tsDiff = sluttTid.Subtract(startTid);
DateTime d = new DateTime(tsDiff.Ticks);
string tidsSkillnad = d.ToString("HH:mm");
DateTime dD = Convert.ToDateTime(tidsSkillnad);
string sTemp = dD.ToShortTimeString().Replace(":", ",");
sFullTid = Convert.ToDecimal(sTemp);
sFullTid = Webbutill.countRast(startTid.ToShortTimeString(), sluttTid.ToShortTimeString(), sFullTid);

</code>
Detta går sedan till classen ovan.
Kan felet ligga inbyggt här?


Svara

Sv: If-sats problem

Postades av 2010-05-03 22:15:10 - Johan Djupmarker

Det är nog flera fel. Först så tycker jag att du ska debugga programmet (läs variablernas värden efter varje operation, så ser du var det går fel).

Vad jag kan se så är grundproblemet att du hanterar minuter som hundradels timmar (när det är 60-dels timmar). T.ex. är inte 15 minuter=0.15 timmar utan 0.25 timmar. Tänk igenom det så kommer du hitta flera fel i din kod.

Johan


Svara

Sv:If-sats problem

Postades av 2010-05-04 09:00:48 - Benni Svensson

Nu tror jag att jag har fått till det, och jag hoppas att ni vill kika lite på koden, den verkar att fungera
bra.
<code>
protected void Button1_Click(object sender, EventArgs e)
{
DateTime startTid;
DateTime sluttTid;
DateTime total;

startTid = Convert.ToDateTime(TextBox1.Text);
sluttTid = Convert.ToDateTime(TextBox2.Text);
TimeSpan tsDiff = sluttTid - startTid;
total =countRast(Convert.ToDateTime(tsDiff.ToString()));
lResult.Text = total.ToShortTimeString();
}
public static DateTime countRast(DateTime totalTid)
{
DateTime rast = Convert.ToDateTime("0:00");
TimeSpan tsDiff = totalTid - rast;
if (totalTid >=Convert.ToDateTime("6:00"))
{
rast = Convert.ToDateTime("0:45");
tsDiff = totalTid - rast;
}
else if (totalTid >= Convert.ToDateTime("3:00") && totalTid < Convert.ToDateTime("6:00"))
{
rast = Convert.ToDateTime("0:15");
tsDiff = totalTid - rast;
}
totalTid = Convert.ToDateTime(tsDiff.ToString());

return totalTid;
}

</code>
Jag gjorde en ny sida enbart för att kolla.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 614
27 953
271 709
503
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies