Jag sitter i VB6 och gör ett beräkningsprogram. Formeln funkar på så sätt att jag alltid för önskat värde fast med flertal decimaler än önskat. Och när jag kommer till avrundningen som skall göra att man får 2 decimaler får jag ett konstant värde på 0.00 det är ju beroende på ingångs värdera. 1,490735E-06 = 0,000001490735 "Say No More" inom programmering och DataTyper det är där man blir ställd. Det finns många sätt, kom till fler i VB6. Men vad är problemet? <b>Men vad är problemet? </b> Och på vilket sätt skulle datatypen ställa till det här? Det verkar ju som om det var mantissan som skulle avrundas till två decimaler, inte hela talet. Vadå mobbing? <b>tre stycken helt överflödiga svar.</b> Effektivare i så fall att skriva <b>>Detta är ett öppet forum. Jag anser inte att något inlägg i tråd är onödigt. Bara för att någon har löst probblemet tycker jag inte detta skall hindra andra från att be om förtydligande.</b> <b>Detta är ett forum där vi i första hand hjälper varandra att lösa programmeringsproblem.</b> Snygg omskrivning. <b>>Att det flesta använder forumet för att lösa programmeringsproblem betyder inte att det utesluter något annat. Jag tolkar det som att du dragit en slutsats att forumet är avsett för programmeringsproblem. </b> Jag erkänner att jag läste igenom tråden lite hastigt. Läser många inlägg på pellesoft. Lättare att skumläsa.Avrundning funkar inte
jag har försökt med olika metoder, dom 2 senaste är följande
<code>
formel = ((flode / (ventil * kold)) * (flode / (ventil * kold))) * 100
svar.Caption = Format$(formel, "0.00")
</code>
Och
<code>
de = ((flode / (ventil * kold)) * (flode / (ventil * kold))) * 100 ' Felet uppstår vid avrundning!
svar.Caption = Round(de, 2)
</code>
Variablen 'formel' har både varit deklarerat som double och single men ger samma resultat, alla andra vaiabler i formeln är deklarerade som double.
Är tacksam för era svar.
Mvh / RobinSv: Avrundning funkar inte
Om ventil = 70 och flode = 74 samt flode = 2
får jag att formel = 1,490735E-06Sv: Avrundning funkar inte
Inte konstigt att det avrundas till 0,00.
Antar att du är ute efter att få det att skrivas som 1,49E-06, dvs två decimaler i mantissan.
Pröva
<code>
Format(formel, "0.00E+00")
</code>Sv: Avrundning funkar inte
Du måste förstå att det finns olika DataTyper tex Single som kan max innehålla 7 siffror med decimaler
och ett åttonde tecken om det behövs (minus).
Duoble som kan varaa stort som faen med decimaler och -. Dvs försök omfatta hur stora tal
du kan skriva med 4 bytes resp 8 bytes. Du kommer inte undan ! du måste lära dig DataTyper i matte !
Beträffande att avrunda så finns Round(talet,2) och eller
Format$(talet,"0.00") båda kommer att svara med 2 decimalerSv: Avrundning funkar inte
T.ex.
FormatNumber()
FormatDate()
FormatCurrency()
Round kan vara lite lurigt då det avrundar jämna nummer neråt och udda uppåt. (Detta för att bevara ett ev. snittvärde även efter avrundning.)
Round(0.5, 0) '0
Round(1.5, 0) '2
Round(2.5, 0) '2
Round(3.5, 0) '4
Borde jag gå igenom de andra 10-20 sätten grundligt i en artikel? :)
Hur de används, vilka resultat.
Int, CInt, CLng, Format, Format$, FormatNumber, Round, Fix, FormatPercent, FormatDateTime.
/AndréSv: Avrundning funkar inte
Per Persson har ju redan gett svaret!
Värdena är av storleksordning 0.000001 och kommer därför alltid avrundas till 0.00 hur man än gör.
Det vettigaste sättet är att använda en annan representation, att skala om talet eller att göra något i stil med formatet "0.00000000".Sv: Avrundning funkar inte
Jag har inga problem. Däremot känner jag till att datatyper kan ställa till det.Sv: Avrundning funkar inte
Sv: Avrundning funkar inte
Per kom med en korrekt lösning som tredje svaret i tråden. Efter det kom det tre stycken helt överflödiga svar.
1. Det står att talet är av storleksordning 0.000001 - alltså måste det vara ett flyttal. Currency klarar bara fyra decimaler. Då är det en single eller en double, inte mer med det.
2. Det står klart och tydligt varför det blir fel.
Jag får inte ihop det till mobbing - jag har anmärkt på att det kommer felaktiga svar på en redan löst fråga, du har svarat, uppenbarligen utan att ha läst igenom tråden. Per svarar på ditt svar och du tycker att det är mobbing?Sv: Avrundning funkar inte
Detta är ett öppet forum. Jag anser inte att något inlägg i tråd är onödigt. Bara för att någon har löst probblemet tycker jag inte detta skall hindra andra från att be om förtydligande.
Jag undrarde bara hur variablerna var deklarerade och jag frågade vänligt. Är det något fel att göra detta?
Jag har inte på något sätt ifrågasatt lösningen. Utan tycker bara att det är relevant för inlägget om deklerationerna av variablerna är med.
Jag blev förvånad när ni börjar ifrågasätt mitt inlägg. Känns inte som det var välkommet i tråden. Därför kände jag något som jag uttryckte som mobbing.
För övrigt vet jag inte om man tjänar något på att skriva om formeln till:
<code>
Function Formel(flode As Double, ventil As Double, kold As Double)
Formel = (flode * flode * 100) / (ventil * kold * ventil * kold)
End Function
</code>
Med denna omskrivning har man ju ersatt en division med en multiplikation. Har för mig att multiplikationer går snabbare än divisioner. Men i detta fallet är det en marginell optimering.
Matte var ju inte min starka sida. Så om jag misslyckats skriva om funktionen är ni välkommna att korigera mina misstag.Sv: Avrundning funkar inte
<code>
x = flode / ventil * kold
formel = x * x * 100
</code>
för att slippa beräkna x-uttrycket flera gånger.Sv: Avrundning funkar inte
Detta är ett forum där vi i första hand hjälper varandra att lösa programmeringsproblem.
Det är inget fel i sig att fortsätta i en tråd som är löst, men då måste ju nya inlägg tillföra något. Du om någon borde väl veta att programmerare inte bryr sig om småprat och "ursäkta mig om jag stör den här vackra tråden, men jag har en annan infallsvinkel". Har vi något att säga så säger vi det.
<b>>Jag undrarde bara hur variablerna var deklarerade och jag frågade vänligt. Är det något fel att göra detta?</b>
I princip inte, nej, naturligtvis. Men i det här fallet är frågan löst, och det har inget med datatypen att göra. Det framgår eftersom det står att den antar värden med flera decimaler, och dessutom detta:
<b>>Variablen 'formel' har både varit deklarerat som double och single men ger samma resultat, alla andra vaiabler i formeln är deklarerade som double. </b>
i första inlägget.
<b>>Jag blev förvånad när ni börjar ifrågasätt mitt inlägg.</b>
Läste du vad vi ifrågasatte?
<b>>. Känns inte som det var välkommet i tråden. Därför kände jag något som jag uttryckte som mobbing.</b>
Jag gav ett allmänt inlägg till alla tre som skrev efter lösningen. Per svarade på ditt svar. Problemet var löst, inget mer att prata om...Sv: Avrundning funkar inte
Vem har bestämt att det är eller skall vara så?
På framsidan står det:
<info>
I forumet kan du få och ge tips och råd och diskutera alla typer av frågor.
</info>
Att det flesta använder forumet för att lösa programmeringsproblem betyder inte att det utesluter något annat. Jag tolkar det som att du dragit en slutsats att forumet är avsett för programmeringsproblem.
<b>Det är inget fel i sig att fortsätta i en tråd som är löst, men då måste ju nya inlägg tillföra något.</b>
För mig tillför det något att få reda på hur variablerna är deklarerade. Försöker du berätta för mig att jag har fel? Att det inte tillför något för mig?
<b>Du, om någon, borde väl veta att programmerare inte bryr sig om småprat och "ursäkta mig om jag stör den här vackra tråden, men jag har en annan infallsvinkel".
</b>
Varför borde jag vara specielt medveten om att programmerre är ointresserade av småprat?
Ditt sätt att formulera dig kan jag tolka som att du talar för någon annan än dig själv. Jag tolkar det som om du talar i roll av programmerare. Då det säkert existerar programmerare med andra åsikter än dig, t.ex. jag. Tycker jag att du därmed begår ett fel i din formulering.
Som författare av inlägg har du bara rätt att tala i egen sak. Du kan berätta vad du har för åsikt och varför du har dem.
Vilket förstärks av nästa mening
<b>Har vi något att säga så säger vi det.</b>
Jag har valt att anmärker på det här för att jag själv försöker vara medveten om språket jag använder mig av.
Jag kan inte förutsätta att den som läser det jag skriver tolkar det efter mina förutsättningar.
Eftersom man kan misstolka det andra skrivit försöker jag, när jag är medveten om det, formulera mig vänligt och tydligt. Då jag tycker detta aldrig kan skada.
Jag tycker du borde omformulerat ditt första inlägg til mig i denna tråden från:
<b>Men vad är problemet?
Per Persson har ju redan gett svaret!
</b>
Till:
<b>
Jag kan inte se vad deklarationen av variablerna kan påverka problemet.
Jag undrar varför du ställer denna fråga?
</b>
Detta hade motiverat mig att förklara varför jag var intresserad i hur variablerna är deklarerade. Istället för att leda till at denna tråd växt till sin nuvarande storlek.Sv: Avrundning funkar inte
Anledningen till att jag skrivit det som:
<code>
Function Formel(flode As Double, ventil As Double, kold As Double)
Formel = (flode * flode * 100) / (ventil * kold * ventil * kold)
End Function
</code>
Är att jag tror flode, ventil och kold är heltal. En multiplikation eller division av heltal är snabbare än en multiplikation eller division av ett flyttal.
Om det skulle röra sig om heltal så kan man ju tjäna på att först göra multiplikation av heltal:
<code>
Dim X As Long
Dim flode As Integer
X = flode * flode * 100
</code>
Och:
<code>
Dim Y As Long
Dim kold As Integer
Dim ventil As Integer
Y = ventil * kold * ventil * kold
<code>
För att till sist göra divisionen och få flyutttalet man söker:
<code>
Dim X As Long
Dim Y As Long
Dim Result As Double
Dim kold As Integer
Dim flode As Integer
Dim ventil As Integer
X = flode * flode * 100
Y = ventil * kold * ventil * kold
Result = X / Y
<code>
Det var så jag tänkte när jag skrev om koden.
Detta förutsätter dock att värdena för kold, flode och ventil är tillräckligt små att resultatet för X och Y inte överstiga ett 32bitars heltal (Long).Sv: Avrundning funkar inte
Du övertolkar det jag skriver.
Forumet är till för programmerare, och programmerare överlag, eller "hackers", är i min erfarenhet ofta resultatinriktade när det gäller faktiska problem. Sen kan man ha generella diskussioner etc., men det är en annan fråga.
<b>>För mig tillför det något att få reda på hur variablerna är deklarerade. Försöker du berätta för mig att jag har fel? Att det inte tillför något för mig?</b>
Återigen; övertolkar något oerhört. Jag säger bara att
1. Det _står_ hur variablerna är deklarerade
2. Problemet är helt och hållet utrett och är löst.
Då är de tre svaren som kom efteråt överflödiga.
<b>>Varför borde jag vara specielt medveten om att programmerre är ointresserade av småprat?</b>
Eftersom du väl är en ganska van programmerare, och därför av min erfarenhet troligtvis anser att problem som inte behöver någon diskussion bara behöver ett korrekt svar och en förklaring.
<b>>Jag tycker du borde omformulerat ditt första inlägg til mig i denna tråden från:
Men vad är problemet?
Per Persson har ju redan gett svaret!
Till:
Jag kan inte se vad deklarationen av variablerna kan påverka problemet.
Jag undrar varför du ställer denna fråga?
</b>
INLÄGGET VAR INTE ENBART TILL DIG. Det var till dig, SvenPon, och AC, vilket jag redan påpekat.
Jag kan sammanfatta mig så här:
1. Tråden är löst.
2. Datatyperna är angivna, och ändå uppenbara.
3. Det har kommit fler inlägg efter lösningen (inklusive mitt svar och resten).
4. De är inte relevanta.
Förstår inte hur du kan reagera så kraftigt på mitt svar när du inte ens läser igenom tråden ordentligt. Tycker vi lägger ner den här infantila kvasidiskussionen nu.Sv: Avrundning funkar inte
Nu när du nämner det ser jag att författaren till tråden berättar datatyperna som används. Jag tycker det skulle vara mycket tydligare om det varit med i kodsnuten. Skyller i alla fall på det. ;o)
Vill bara säga at jag inte övertolkar. Utan jag försöker alltid tolkar ordagrant.
Jag tycker oxå att vi nu kankan lämna denna tråd.