---
title: "1.057 blir till 1.0569999999999999 i VB .Net???"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/116574-1-057-blir-till-1-0569999999999999-i-vb-net"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "lilja"
published: "2004-11-24T07:51:54.000Z"
updated: "2004-11-30T02:48:07.000Z"
replies: 28
views: 1149
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/116574-1-057-blir-till-1-0569999999999999-i-vb-net"
---

# 1.057 blir till 1.0569999999999999 i VB .Net???

_Sida 1 av 2._

## #1 — lilja, 2004-11-24T07:51Z

Hej alla!

Varför är det så att en del decimaltal ändras när man skriver in dem?? I mitt fall ville jag öka en variabels värde med 5,7%. Men så fort jag skrivit in 1.057 och låtit Visual Studio .Net kontrollera raden så blir värdet istället 5,69999999999999%??

Varför blir det såhär? Finns det en anledning till att det ska vara så eller är det bara jag som har problem med Visual Studio .Net? Någon idé om hur jag kan ändra så att 1.057 blir 1.057 istället för 1.0569999999999999??

Permalänk: https://www.webforum.nu/p/116574

## #2 — lilja, 2004-11-24T07:52Z

Bifogar ett kodexempel!

```
    Private Sub cmdBeraknaNyLon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBeraknaNyLon.Click
        Dim intGammalLon, intNyLon As Integer

        intGammalLon = Convert.ToInt32(txtGammalLon.Text)

        If intGammalLon < 1.0569999999999999 Then
            intNyLon = intGammalLon * 1.0569999999999999
        Else
            intNyLon = intGammalLon * 1.02
        End If

        lblNyLon.Text = "Din nya lön blir" & intNyLon.ToString("0.00")
    End Sub
```

Permalänk: https://www.webforum.nu/p/1491656

## #3 — Nöff, 2004-11-24T07:55Z

prova att använda float istället

Permalänk: https://www.webforum.nu/p/1491659

## #4 — nitro2k01, 2004-11-24T08:01Z

Hur irriterande det än är med att koden ändras så är 1.056999 med oändligt många nior och 1.0567 samma tal, rent matematiskt.

Permalänk: https://www.webforum.nu/p/1491666

## #5 — lilja, 2004-11-24T08:51Z

inte när man går mot oändligheten!

Permalänk: https://www.webforum.nu/p/1491691

## #6 — lilja, 2004-11-24T08:52Z

float som variabel?

Permalänk: https://www.webforum.nu/p/1491694

## #7 — nitro2k01, 2004-11-24T08:58Z

Pröva detta:

```
Dim intGammalLon As Double, intNyLon As Double
```

Och, jo, jag har för mig att det gäller även när man går mot oändligheten.

Permalänk: https://www.webforum.nu/p/1491696

## #8 — lilja, 2004-11-24T09:41Z

det är när jag skriver in ett konstant tal som det blir så...

ex:

intGammalLon \* 1.057

görs om till

intGammalLon \* 1.0569999999999999

i programkoden

Permalänk: https://www.webforum.nu/p/1491716

## #9 — Marcus E, 2004-11-24T14:58Z

Flyttal är nästan aldrig exakta. Därför ska man tänka på två saker när man använder dem. Jämförelser ska göras inom ett intervall. Formatering ska göras med ett visst antal decimaler. 

Exempel - nära noll:
Nära noll: \> -0.1  && \< 0.1

Exempel - PI med två decimaler:
string.Format("Tal: {0:F2}", Math.PI);

Permalänk: https://www.webforum.nu/p/1491930

## #10 — lilja, 2004-11-25T13:49Z

Vad har det med min fråga att göra??????

på samma sätt som

```
if
     kod...
end if
```

ändras till:

```
If
     kod...
End If
```

... alltså på samma sätt som vissa små bokstäver blir stora blir 0.5 till 0.499999999 för mig i koden! INTE i någon label eller liknande utan i programkoden!  VARFÖR???

Permalänk: https://www.webforum.nu/p/1492326

## #11 — nitro2k01, 2004-11-25T13:53Z

Jag skrev ett svar [här](http://www.webforum.nu/showthread.php?s=&postid=956697#post956697). Hur funkade det? Pröva och berätta sen om det funkade!

Permalänk: https://www.webforum.nu/p/1492330

## #12 — Pace, 2004-11-25T16:19Z

> **lilja skrev:**
>
> VARFÖR???

För att ditt program tycker om många decimaler.

Titta bland inställningarna och se vad som kan vara fel.

Permalänk: https://www.webforum.nu/p/1492405

## #13 — UlfT, 2004-11-25T16:27Z

> **lilja skrev:**
>
> Vad har det med min fråga att göra??????

Marcus E:s svar har allt med din fråga att göra. Mycket förenklat kan man konstatera att det hänger ihop med problemet att lagra decimala tal i det binära systemet, där även decimalerna är binära. Vissa tal låter sig helt enkelt inte översättas rakt av till binära tal. Frågan är alltså hur den binära representationen av 1.057 egentligen ser ut. Just det talet kanske inte kan representeras exakt i det binära talsystemet. Då kan det bli så.

Permalänk: https://www.webforum.nu/p/1492410

## #14 — Marcus E, 2004-11-25T18:27Z

Om du skriver 0.5 kommer det inte att ändras till 0.499... i din kod. Däremot kan det visas som 0.499...  på alla de platser där talet visas. För att istället visa det med ett fast antal decimaler (t.ex. 0.5) kan man göra som jag skrev i mitt tidigare inlägg.

Att if blir If är en helt annan sak som handlar om att VB inte skiljer mellan små och stora bokstäver och föredrar att det står If istället för if.

Permalänk: https://www.webforum.nu/p/1492461

## #15 — lilja, 2004-11-25T22:57Z

Ja men det är bara i skolan i vissa datasalar som som detta händer... Testade nyss i hemmet och här händer det inte...

Så vad är det för inställning man ska ändra på för att 1.057 ska förbli 1.057 iställer för att ändras till 1.0569999999... Jag hittar den inte :(

Permalänk: https://www.webforum.nu/p/1492570

## #16 — Marcus E, 2004-11-25T23:13Z

Läs mitt inlägg en gång till. <http://www.webforum.nu/showthread.php?s=&postid=956963#post956963>
Fråga gärna om det är något du inte förstår i det.

Flyttal kan inte alltid representeras som exakta tal. För att visa dem på skärmen (formatera) dem som exakta tal måste man ange hur många decimaler som ska visas.
1\.057 och 1.05699... är exakt samma tal. Det är bara två olika sätt att visa dem. Bestämmer du att ett visst antal decimaler ska användas kommer niorna att avrundas uppåt så att du slipper se dem.

Permalänk: https://www.webforum.nu/p/1492576

## #17 — lilja, 2004-11-26T21:33Z

snälla förstå mig!

Jag förstår att man måste formatera resultatet för att få t.ex. två decimaler på skärmen... Detta är INTE problemet!

Mitt problem är att i PROGRAMKODEN står det t.ex:

```
variabel = 15 * 1.056999999999999999
```

när jag i själva verket skrivit in:

```
variabel = 15 * 1.7
```

Jag har INGET problem med utskriften... Det är enbart i PROGRAMKODEN! Så jag tänkte att om man vill multiplicera riktigt stora tal så kommer det att bli skillnad i svaret...

Det är som sagt bara i ett klassrum i skolan som detta sker? I mitt hem består 1.057 (och andra tal!) så som jag skriver in dem i PROGRAMKODEN!

Jag tänkte att det måste vara en inställning också men vad är det för oinställning!

Igen, PROGRAMKODEN! Inte utskriften i programkörningen utan i programkoden!

Permalänk: https://www.webforum.nu/p/1493058

## #18 — clarkbones, 2004-11-27T00:20Z

@lilja:
Men för bövelen har du testat med Nitros kod? DOUBLE !!!!!
Du sitter ju multiplicerar integers med decimaltal=Helt fel 

> **nitro2k01 skrev:**
>
> Pröva detta:
>
>
> ```
> Dim intGammalLon As Double, intNyLon As Double
> ```

Permalänk: https://www.webforum.nu/p/1493133

## #19 — lilja, 2004-11-27T00:33Z

men det var då... DET KVITTAR!

Jag kan lika väl skriva såhär:

Om jag i koden skriver

```
variabel = 17,5 *1.057
```

så ändras det till

```
variabel = 17,4999999999999 *1.05699999999999999
```

**Min fråga var varför Visual Studio .Net ändrar min kod så att det står ANDRA tal än vad jag skrev dit!

**OBS! Detta sker enbart i skolans datorer och måste därför vara en inställning? Eller? OBS!****

Permalänk: https://www.webforum.nu/p/1493134

## #20 — Nöff, 2004-11-27T01:32Z

```
intGammalLon = Convert.ToInt32(txtGammalLon.Text)
```

Det är här problemet ligger. en int variabel kan inte hantera decimaler därför kommer den kapa bort dem, du måste använda en variabel som kan hantera decimaler. och riktigt många helst, såsom en riktig feting "float" eller "double".

gör om alla variabler till float eller double så ska du se att det ordnar sig.

double test = double.Parse("1,006868768600");

Permalänk: https://www.webforum.nu/p/1493147

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/116574-1-057-blir-till-1-0569999999999999-i-vb-net  
Nästa sida: https://www.webforum.nu/amne/dotnet/116574-1-057-blir-till-1-0569999999999999-i-vb-net/page2.md
