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


Jäkla decimalhantering!!!!

Postades av 2008-12-16 23:56:10 - Johannes Strömberg, i forum asp.net generellt, Tråden har 12 Kommentarer och lästs av 1333 personer

Halloj, nu börjar mitt tålamod tryta och jag tänkte att någon av er herrar och damer kan vägleda mig.

Jag har en ASP.NET sida där folk matar in värden i decimaltal med både komma och punkter hejvilt.
Dessa sparas sedan i ett DataSet och då med typen Double. Således har jag fått korrigera alla komman till punkter för att inte datasetet ska få spelet.

Problemet är sedan när jag ska spara det till en databas (SQL-server 2005), kolumnens datatyp är float, via en Stored Procedure så skiter den högaktningsfullt i decimalerna, även om jag har ersatt punkterna med komman. Oavsett vilket så är 90,5 = 91 i databasen.

Detta är galet då precisionen med en decimal i det här fallet är ganska viktigt. Så hur sjutton ska jag göra detta?? Blir riktigt konfys och irriterad på att det inte funkar.

Hjälp.. Någon?

//Johannes


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-17 07:47:52 - Johan Djupmarker

Låter lite märkligt att talet skulle avrundas i databasen... Är du säker på att du tillåter decimaler i fältet i databasen? Kan du lägga till värdet 90.5 manuellt i databasen? Avrundningen sker inte vid presentationen istället?

/Johan


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-17 09:15:37 - Martin Adrian

Förstår inte problemet. Varför skickar du en textsträng (med komma eller punkt) till databasen om det är ett float-fält.

Konvertera det inmatade värdet till en Double innan du skickar det till databasen.


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-17 16:26:06 - Håkan Borneland

Visa koden du använder.
Både C# och SPn, så kanske någon kan se det du missar.
F.ö gillar inte SQL Server att tilldela en float kolumn värden med decimaltecken, vill ha punkt.
Och nej den trunkerar/avrundar inte.
Vilket leder mig till att tro att "avrundningen"redan skett när den sparas i databasen.
Om du däremot skulle ha deklarerat kolumnen som t.ex. decimal(2) då får du det beteendet du beskriver.


Svara

Sv:Jäkla decimalhantering!!!!

Postades av 2008-12-19 10:21:06 - Johannes Strömberg

Följande värden matas in i sp:n

<code>

ssql = "sp_SaveDetails"
Comm = New SqlCommand(ssql, Conn)
Comm.CommandType = CommandType.StoredProcedure
Comm.Parameters.AddWithValue("@CClass", 1)
Comm.Parameters.AddWithValue("@cAR", "90,5")
Comm.Parameters.AddWithValue("@lGKR", "70,5")
Comm.Parameters.AddWithValue("@lZ", "83,5")
Comm.ExecuteNonQuery()

</code>

SP:n ser ut som följer:

<code>
USE CDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE sp_SaveDetails
@CClass int = NULL,
@cAR float = NULL,
@lGKR float = NULL,
@lZ float = NULL
AS

BEGIN

SET NOCOUNT ON;

INSERT INTO tblDetails (CClass,cAR,lGKR,lZ)
VALUES (@CClass,@cAR,@lGKR,@lZ)

END
</code>

Resultatet i SQL-tabellen om jag kör en SELECT blir:
CCLass = 1
cAR = 91
lGKR = 71
lZ = 84

Och som svar på Martins fråga så måste jag skicka den till datatablen (där datan lagras innan den sparas till databasen) som en Double och då måste jag använda mig av punkt som decimalavgränsare annars får den sinnet och vägrar erkänna värdet som en Double.

//Johannes


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-19 10:54:06 - Håkan Borneland

Tack för kod.

Drog upp ett C# consoleprojekt klistrade in din kod.
Skapade din tabell.
Skapade din SP (döp INTE dina SPs med prefixet "sp_" så heter SQL Servers egna interna SPs).
Fick byta ut decimalavgränsare till punkt (konverteringserror frånDBn).
Körde frågan.
I tabellen fanns då:
CCLass = 1
cAR = 90,5
lGKR = 70,5
lZ = 83,5

Du pratar om ett datatable och double också någonstans.
Låter som det är där det blir en avrundning.
Läs vad jag skrev förra inlägget om double.


Svara

Sv:Jäkla decimalhantering!!!!

Postades av 2008-12-19 12:26:51 - Johannes Strömberg

Tack Håkan!

Nu har jag meckat runt och grävt som en galning i koden, och mycket riktigt, den drog alla värden genom en annan klass för validering och där, långt ner i den mörka avgrunden så återfann jag ett

<code>

outp = math.round(inp,0)

</code>

Där satt den.

Tack så mycket för hjälpen, nu kanske jag rent av kan få ner blodtrycket till normal nivå igen.. ;)

M V H
Johannes


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-19 12:31:59 - Martin Adrian

Varför inte göra så här:

Comm.Parameters.Add("@CClass", SqlDbType.Int).Value = 1;
Comm.Parameters.Add("@cAR", SqlDbType.Float).Value = 90.5;
Comm.Parameters.Add("@IGKR", SqlDbType.Float).Value = 70.5;
Comm.Parameters.Add("@IZ", SqlDbType.Float).Value = 83.5;


Svara

Sv:Jäkla decimalhantering!!!!

Postades av 2008-12-19 13:09:06 - Johannes Strömberg

Det ser, i min enkla mening, ganska omständigt ut i jämförelse med det jag har nu.

//Johannes


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-19 13:14:54 - Håkan Borneland

Bra att det bidrog till att isolera var du skulle felsöka, och att du hittade felet.


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-19 13:46:55 - Oskar Johansson

Det känns mer felbenäget att hantera tal som strängar. En ganska bra anledning att ta den lite längre varianten. Dessutom är den tydligare


Svara

Sv: Jäkla decimalhantering!!!!

Postades av 2008-12-19 14:59:28 - Martin Adrian

>Det ser, i min enkla mening, ganska omständigt ut i jämförelse med det jag har nu.

Det är nästan alltid "ganska omständigt" att göra rätt om man bara ser till koden.

Den enkla vägen ledde ju till högt blodtryck vilket jag tycker verkar omständigt.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

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 569 165
27 952
271 704
918
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