16. september 2007 - 22:35
Der er
8 kommentarer og 2 løsninger
Asp.Net runder tal af
Hej eksperter... Jeg har et lille problem. Jeg er ikke sikker på om hvorvidt det er mig der laver noget forkert, eller om det er et indstillingsspørgsmål. Problemet ligger i når jeg f.eks. gør dette: Dim intTest as Integer intTest = 1.92 Så bliver intTest automatisk 2. Hvis jeg sætter intTest til 0.5 bliver den 0. Hvorfor gør den det? Og ikke mindst kan jeg undgå det? Tak..
Annonceindlæg fra Cognizant
16. september 2007 - 22:38
#1
Brug double i stedet for. en int kan kun vise hel tal. tal på >=0,5 bliver rundet op ellers rundes ned til nærmeste hel tal. Dim intTest as double intTest = 1.92
16. september 2007 - 23:01
#5
Bortset fra at diverse betragtninger om korrekt type og advarsel mod implicitte konveteringer, så er det værd at bemærke at den specifikke afrunding skyldes at den afrunding der laves ved implicit konvertering bruger bankers rounding d.v.s. at den runder .5 af mod lige tal.
16. september 2007 - 23:02
#6
saudoo prøv evt. at køre denne her side: <%@ import namespace="System.Data" %> <html> <head> <script language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim dt As DataTable = New DataTable() dt.Columns.Add(New DataColumn("x", GetType(Double))) dt.Columns.Add(New DataColumn("Floor", GetType(Integer))) dt.Columns.Add(New DataColumn("Ceiling", GetType(Integer))) dt.Columns.Add(New DataColumn("CType", GetType(Integer))) dt.Columns.Add(New DataColumn("Assignment", GetType(Integer))) dt.Columns.Add(New DataColumn("Special", GetType(Integer))) Dim i As Integer Dim x as Double Dim j As Integer For i = 0 To 9 x = i + 0.25 j = x dt.Rows.Add(New Object() { x, Math.Floor(x), Math.Ceiling(x), CType(x, Integer), j, Math.Floor(x+0.5) }) x = i + 0.5 j = x dt.Rows.Add(New Object() { x, Math.Floor(x), Math.Ceiling(x), CType(x, Integer), j, Math.Floor(x+0.5) }) x = i + 0.75 j = x dt.Rows.Add(New Object() { x, Math.Floor(x), Math.Ceiling(x), CType(x, Integer), j, Math.Floor(x+0.5) }) Next MyDataList.DataSource = dt.DefaultView MyDataList.DataBind() End Sub </script> </head> <body> <form runat=server> <table border> <tr> <th>x</th> <th>Math.Floor(x)</th> <th>Math.Ceiling(x)</th> <th>CType(x,Integer)</th> <th>Integer=</th> <th>Math.Floor(x+0.5)</th> </tr> <asp:Repeater id="MyDataList" runat="server"> <ItemTemplate> <tr> <td><%# DataBinder.Eval(Container.DataItem,"x") %></td> <td><%# DataBinder.Eval(Container.DataItem,"Floor") %></td> <td><%# DataBinder.Eval(Container.DataItem,"Ceiling") %></td> <td><%# DataBinder.Eval(Container.DataItem,"CType") %></td> <td><%# DataBinder.Eval(Container.DataItem,"Assignment") %></td> <td><%# DataBinder.Eval(Container.DataItem,"Special") %></td> </tr> </ItemTemplate> </asp:Repeater> </table> </form> </body> </html>