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


CDbl/Val + "decimal symbol" problem

Postades av 2006-10-29 21:00:54 - Peter Larsson, i forum visual basic - allmänt, Tråden har 24 Kommentarer och lästs av 1097 personer

Hej
Jag har en sträng "1.2" som jag vill konvertera till en double.

Jag får följande svar med följande "Decimal Symbol"s (i "Regional and Language Options"):

"," ger
<code>
Val("1.2") => 1,2
CDbl("1.2") => 12
</code>

"." ger
<code>
Val("1.2") => 1.2
CDbl("1.2") => 1.2
</code>

något annat, exvis "p" ger:
<code>
Val("1.2") => 1p2
CDbl("1.2") => 12
</code>

Hur gör jag för att alltid få "1.2" oavsett decimal symbol?
Jag vill alltså att mitt program skall kunna köras hos alla användare med olika språkinställningar.


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-29 23:54:04 - Sven Åke Persson

Ja det är en djä... soppa.

Förmodar att du matar in via TextBoxar.
<code>
'Använder alltid .(punkt) och Val
'Snyggar till decimaler med Round

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 44 Then KeyAscii = 46 'alltid punkt
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 44 Then KeyAscii = 46 'alltid punkt
End Sub

Private Sub Command1_Click()
Label1.Caption = Val(Text1.Text) * Val(Text2.Text)
MsgBox Round(Label1.Caption, 2)
End Sub
</code>
Återkom om du vill ha ytterligare råd och dåd.


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-30 08:25:53 - Martin Adrian

Du måste gjort något fel.

Val använder alltid "." oavsett de regionala inställningarna.

Jag tror att du har lyckats få med en implicit konvertering till sträng när du skall visa utdata. Implicita konverteringar sker alltid enligt de regionala inställningarna. Använd alltid Str/CStr när du skall konvertera tal till strängar så får du bättre koll och mindre problem (dock lite mer att skriva).

Så här borde det fungera: (berätta gärna om det inte gör det)
","
Str(Val("1.2")) => "1.2"
Str(CDbl("1.2")) => "1"
Str(Val("1,2")) => "12"
"."
Str(Val("1.2")) => "1.2"
Str(CDbl("1.2")) => "1.2"
Str(CDbl("1,2")) => "12"
"p"
Str(Val("1.2")) => "1.2"
Str(CDbl("1.2")) => "1.2"
Str(CDbl("1p2")) => "1.2"
Str(Val("1,2")) => "12"

Finns inte CLSID i VB?


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-30 14:04:48 - Andreas Hillqvist

<b>Jag har en sträng "1.2" som jag vill konvertera till en double.</b>
Som sagts tidigare i denna tråd, Val() funktionen använder ALLTID punkt som decimalseparator.

Som jag identifierar är ditt problem är tvärt om: Decimal till sträng?

En fullösning:

Public Function AntiVal(Value As Double) As String
    AntiVal = Replace(CStr(Value), Format(0, "."), ".", 1, 1)
End Function


Om du istället berättar varför du vill göra detta?

Är det så att du vill stoppa in ett värde i en SQL sträng, då SQL kräver att du använder punkt som decimalseparator?
Det finns i så fall andra, bättre metoder för att göra detta


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-30 16:48:39 - Peter Larsson

Hej Martin

<b> Använd alltid Str/CStr när du skall konvertera tal till strängar</b>

Jepp funkade perfekt med Str(Val("1.2")), då får jag ALLTID "1.2" som svar.

Varför går jag då från String->Double->String?
Jo, jag tänkte som följande, att om jag matar in "1", så vill jag ha "1.0".
("1.2" => "1.2", "10.023" => "10.0", "90" => "90.0" osv)

Jag använder då

Format$(Val("1"), "0.0")


Detta ger dock värdet "1,2" vilket Val() inte gillar, utan får då "1" som svar:
 Str(Val(Format$(Val("1"), "0.0"))) => "1"


Hur får jag Format$ att alltid returnera "." som decimal-tecken?


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-30 19:26:42 - Andreas Hillqvist

Kan du inte berätta varför du vill göra det istället?


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-30 20:15:02 - Peter Larsson

<b>Kan du inte berätta varför du vill göra det istället?</b>

Har indata som "20", "10.123", "0.0012".
Dessa vill jag ha en decimal på.

Och jag vill använda Val() och Format().
Går att lösa med, som du sa, Replace(Format$(1, "0.0"), ",", ".").


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 09:33:46 - Andreas Hillqvist

Det framgår inte varför du vill presenter med punkt.

Handlar det om presenter för användare eller att en applikation/komponent kräver det?

Du talar inte om vad du gör. I vilket sammanhang du behöver formatera ditt tal med ett angivet antal decimaler och decimalseparator.
Detta är värdefull information för att finna en bra lösning.


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 09:46:11 - Sven Åke Persson

<code>
Private Sub Command1_Click()
MsgBox Format$(Val("10.1623"), "0.0")
MsgBox Format$(Val("20"), "0.0")
MsgBox Format$(Val("0.00027"), "0.0")
End Sub
</code>


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 17:01:16 - Peter Larsson

Hej Andreas
Vid utskrift (skriver till fil), vill jag ha decimaler.


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 17:10:04 - Sven Åke Persson

<b>Vid utskrift (skriver till fil), vill jag ha decimaler.</b>

Tror Vi hamnat i en återvändsgränd.!

Lönar sig inte att Vi försöker hjälpa honom !

Over and out


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 17:35:34 - Peter Larsson

Tack Sven


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 18:01:29 - Niklas Jansson

Varför vill du ha decimaler?
Varför skriver du till fil?
Ska den in i ett system?
Ska någon läsa den, skall den skrivas ut?


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 18:36:58 - Andreas Hillqvist

Du skulle kunna använda Access/JET's OLEDB textfils drivrutin.
Då kan du ange decimalseparator osv. Dessutom kan du lägga till poster med SQL eller med ett Recordset.
Är din fil, komma, tab eller fastbredd?


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 18:46:14 - Peter Larsson

Programmet jag gör är tänkt att vara en level-editor till ett spel jag har.
Jag sparar all data komma separerat i filen.
Det är inte nödvändigt att ha decimalen med om jag inte angivit decimaler,
men det jag undrar är hur man ändå gör det på ett korrekt sätt.


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 19:18:18 - Andreas Hillqvist

Här är ett exempel på hur du kan öppna en fil genom ADO och Access/JET OLEDB Providern:

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
	FileName = "[textfile#txt]"
	path = App.Path & "\Text files\"

	'This is connection for a text file
	Set con = new ADODB.Connection
	con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" + _
	         "Extended Properties='Text';" + _
	         "Data Source=" & path & ";"

	Set rs = new ADODB.Recordset
	rs.Open "SELECT * FROM " & FileName, con, adOpenKeyset , adLockOptimistic 
	
	
	rs.Close
	con.close

Nyckeln är schema.ini filen som skall ligga i samma katalog som textfilerna.
<code>
[textfile.txt]
ColNameHeader=False
Format=CSVDelimited
DecimalSymbol=.
</code>


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 20:00:25 - Peter Larsson

Tackar, intressant :)


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 22:26:46 - Andreas Hillqvist

Glömde en viktig bit i pusslet. Länken till dokumentationen om schema.ini;
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcjetschema_ini_file.asp

Öven om den är för ODBJ så är den tillämpar i detta fallet.

Något som oxå är mycket intressant är att du kan ange datatype för kolumner.
Detta borde underlätta för att läsa och skriva till textfiler.
Jag vet dock ej hur effektiv denna drivrutin är.

Om du vill skapa ett eget filformat för bannor så rekomenderar jag ett binärtfilformat istället.
Där du skriver User Defined Types(UDT):

Public Type Cell
    X As Integer
    Y As Integer
    PictureIndex As Integer
End Type

Dessa kan du väldigt effektivt läsa och skriva till filer då ingen konvertering behöver göras till stränger.
Tyvärr kan du då inte längre redigera dem manuellt i en texteditior.


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-10-31 23:56:34 - Niklas Jansson

<b>Programmet jag gör är tänkt att vara en level-editor till ett spel jag har.
Jag sparar all data komma separerat i filen. </b>
Då skulle jag säga att det du ska satsa på är en binär representation istället. Behöver inte tänka på skiten. Punkt och decimalkomma är enbart en ui- (eller möjligtvis system-)fråga.


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-11-01 11:59:20 - Andreas Hillqvist

Roligt att höra att du oxå stödjer iden med binärfilformat.


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-11-01 12:54:11 - Niklas Jansson

Hehe, läste visst inte igenom tidigare inlägg ordentligt.


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-11-01 14:26:47 - Sven Åke Persson

Binärt klart !

Men ! begriper frågeställaren hur Vi menar ?


Svara

Sv: CDbl/Val + "decimal symbol" problem

Postades av 2006-11-01 17:47:38 - Peter Larsson

Hej

Ja, att spara banorna binärt är självklart det bästa.
Men spelet jag har läser in datat i text-format. Och jag gjorde spelet för 4 år sen, och orkar inte ändra.

Tack för alla tips och råd!


Svara

Sv:CDbl/Val + "decimal symbol" problem

Postades av 2006-11-01 21:06:47 - Andreas Hillqvist

Du får lägga upp det som öppen källkod, så kan vi skriva om det att ta binärfiler. ;)


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

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 725
27 958
271 751
1 353
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