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


Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 11:17:35 - Bo Johansson, i forum visual basic - allmänt, Tråden har 7 Kommentarer och lästs av 1065 personer

Hej!
Mysko det här. Jag behöver skilja ett värde med 1 decimal ifrån de som har fler än en.
Min lösning är den här:
Dim Tempo As Double
Tempo = 125.2
Tempo = Tempo - Fix(Tempo)

Resultatet jag får ut är 0.2000000003, antal nollar kanske ine exakt angivit men ungefär så här många.
Varför då då? Jag förväntade mig 0.2



Svara

Sv: Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 11:22:26 - Björn Österman

Ingen aning om varför det blir så... Men testa att gångra talet med 10 först:

Dim Tempo as Double
Tempo = 125.2 * 10
If Tempo = Fix(Tempo) Then ...

// MvH Björn


Svara

Sv:Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 11:26:30 - Bo Johansson

Ibland står det still, jag kör på det! Tackar för snabbt svar. Sen kan jag ju ägna min ålderdom åt att lista ut varför :)
/Bo


Svara

Sv: Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 11:51:00 - Niklas Jansson

Skälet är helt enkelt att decimaltalen inte kan representeras exakt i datorn.

Enklaste lösningnen torde vara att hålla reda på hur många decimaler det är, och sen avrunda till det.


Svara

Sv: Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 11:54:11 - henrik tibbing

jag är osäker på varför visual basic vill göra så här med decimaltal, prövar du tex att skriva ut 10.2-10 i debugen så returneras 0,19999999999
10.3-10 ger 0.3000000000001
det blir fel med de flesta decimaltal på det här sättet, dock inte när man tar ex 1.3-1

vad du däremot kan göra är att använda dig av vb's inbyggda funktion round, ex:

Tempo = 125.2
Tempo = Tempo - Fix(Tempo)
Text1.Text = Round(Tempo, 1)

ettan säger hur många decimaler du vill ha i svaret


Svara

Sv:Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 13:29:16 - Martin Adrian

>jag är osäker på varför visual basic vill göra så här med decimaltal, prövar du tex att skriva ut 10.2-10 i debugen så returneras 0,19999999999

Som Niklas sa så beror det på att inte alla decimaltal kan representeras exakt i datorn med den binära datatypen "double".

Det är samma fenomen som att 10/3 inte går att skriva exakt med decimal representations så 10/3 * 3 blir inte 10.

>det blir fel med de flesta decimaltal på det här sättet, dock inte när man tar ex 1.3-1

Ibland har man tur med avrundingen men det går inte att lita på.

Om man måste ha exakta decimala värden bör man använda en exakt datayp som t.ex. Integer eller Currency. Strängar med siffror eller BCD går också bra men det blir klurigare att göra beräkningar.

En annan lösningen på ursprungsproblemet är definiera hur stort fel som är tillåtet. Om man bara har tal som har färre än 4 decimaler kan man t.ex. använda 1e-6 som max fel.

if tempo*10 - int(tempo*10) > 1e-6*10 Then 'mer än en decimal

(blir lite krångligare om man har negativa tal)


Svara

Sv: Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 15:12:02 - Heinz Svedling

Prova med att använda Currency istället för Double


Svara

Sv:Skilja tal med en decimal från tal med fler decimaler

Postades av 2005-05-09 21:41:15 - Bo Johansson

Tackar för alla synpunkter!


Svara

Nyligen

  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino

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 570 877
27 965
271 771
666
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