28. marts 2005 - 15:05Der er
17 kommentarer og 1 løsning
Decimaltal med 2 decimaler
Hej eksperter.
Jeg har forgæves søgt på nettet efter en løsning på mit problem. Jeg er ved at oprette en faktura, og det virker sådan set godt nok. Dog er problemet, at der ikke er decimaler på, så mit spørgsmål er, hvordan jeg løser mit problem, så jeg på fakturaen kan skrive tal med nøjagtig to decimaler!?!
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Module Main Sub Main() Console.WriteLine(String.Format("{0:0.00}",123)) Console.WriteLine(String.Format("{0:0.00}",12.3)) Console.WriteLine(String.Format("{0:0.00}",1.23)) End Sub End Module
Ok - men det er vel kun når man skal skrive et tal ud?
Jeg har snarere brug for en konstant der husker på det tal med to decimaler, da jeg ligger nogle ting sammen inden jeg skriver det ud. Ligesom en integer gemmer en værdi uden decimaler.
Håber du forstår, og undskyld hvis jeg ikke lige har været klar nok i beskrivelsen af det problem jeg har...
integer kan ikke gemme decimaler double kan gemem decimaler men har andre uhensigtsmæssigheder i forbindelse med beløb decimal er det rigtige valg for beløb
Jeg har brugt integer indtil nu, og den runder fint nok af (enten op eller ned), men hvis man gemmer en integerværdi på feks 10,25, så husker den vel ikke på ,25, når jeg skriver den ud?
Det vil sige, at jeg skal ændre det til decimal i stedet for integer, og så bruge dit første svar når jeg skal sætte beløb på fakturaen. Altså med 2 decimaler?
Imports System Imports System.Threading Imports System.Data.OleDb
Class MainClass Public Shared Sub Main(ByVal args As String()) Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb") con.Open Dim cre As OleDbCommand = New OleDbCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con) cre.ExecuteNonQuery Dim ins As OleDbCommand = New OleDbCommand("INSERT INTO dtest VALUES (?, ?)", con) ins.Parameters.Add("@i", OleDbType.Integer) ins.Parameters.Add("@d", OleDbType.Date) Dim i As Integer For i = 0 To 9 ins.Parameters("@i").Value = i ins.Parameters("@d").Value = DateTime.Now ins.ExecuteNonQuery Thread.Sleep(1000) Next Console.WriteLine("All rows :") Dim sel As OleDbCommand = New OleDbCommand("SELECT * FROM dtest", con) Dim rdr As OleDbDataReader = sel.ExecuteReader While rdr.Read Dim iv As Integer = CType(rdr(0), Integer) Dim dv As DateTime = CType(rdr(1), DateTime) Console.WriteLine(iv & " " & dv) End While rdr.Close Console.WriteLine("Rows last 5 seconds since " + DateTime.Now + " :") Dim sel2 As OleDbCommand = New OleDbCommand("SELECT * FROM dtest WHERE d > ?", con) sel2.Parameters.Add("@d", OleDbType.Date) sel2.Parameters("@d").Value = DateTime.Now.AddSeconds(-5) Dim rdr2 As OleDbDataReader = sel2.ExecuteReader While rdr2.Read Dim iv As Integer = CType(rdr2(0), Integer) Dim dv As DateTime = CType(rdr2(1), DateTime) Console.WriteLine(iv & " " & dv) End While rdr2.Close Dim drp As OleDbCommand = New OleDbCommand("DROP TABLE dtest", con) drp.ExecuteNonQuery con.Close End Sub End Class
Princippet er at at man laver sin SQL statement med placeholders (? med OLE DB, @navn med SQLServer) og så assigner variablene direkte over i parameter value uden nogen formatering.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.