Avatar billede stefan_v Nybegynder
05. oktober 2003 - 20:07 Der er 6 kommentarer og
1 løsning

, eller . som tusindtalsseperator i C#/MS SQL

Jeg har et problem, som for mig lyder alt for simpelt, men som stadig volder mig problemer...

I en tabel i mssql har jeg en række tal (decimal), som jeg via C# skal modificerer og derfefter lægge tilbage i en ny tabel.
Problemet er:
Tallene i DB er komma-sepereret (ex. 57,95), men prøver jeg at lægge disse tal tilbage (efter at have været konverteret til enten double eller decimal, vil mssql ikke tage imod dem. Indtaster jeg direkte i Query Analyzer, vil den have tal i form af 57.95 altså et punktum...

Jeg har prøvet at bruge metoden Replace(",", ".") på de indkomne værdier for at kunne lægge dem tilbage med punktumm men nu fjernes punktummet helt i DB og 57,95 bliver fx 5795 - ikke så fedt...

Alt i alt behøver jeg bare at få kommatal ind i C# og lægge dem tilbage i DB igen - Jeg forstår bare ikke hvordan det kan være så svært.

Håber i forstår hvor jeg vil hen og håber i kan give en hånd med. Tak.
Avatar billede kenp Novice
05. oktober 2003 - 20:09 #1
Du må ihvertfald ikke have 2 ens spørgsmål åbne om det sammen ;) så luk lige det som ikke passer ind i den rigtige kategori.
Avatar billede erikjacobsen Ekspert
05. oktober 2003 - 20:10 #2
Du skal konvertere fra "," til "." fra databasen, og "." til "," til databasen
Avatar billede arne_v Ekspert
05. oktober 2003 - 20:38 #3
Her er et lille illustrativt eksempel med brug af NumberFormatInfo:

using System;
using System.Globalization;

class MainClass
{
    public static void Main(string[] args)
    {
        NumberFormatInfo fmt = new NumberFormatInfo();
        fmt.NumberDecimalSeparator = ",";
        fmt.NumberGroupSeparator = "";
        double x = 123.456;
        Console.WriteLine(x.ToString());
        Console.WriteLine(x.ToString(fmt));
        Console.WriteLine(Double.Parse("123.456"));
        Console.WriteLine(Double.Parse("123,456", fmt));
    }
}
Avatar billede odegaard Nybegynder
05. oktober 2003 - 21:19 #4
SQL sproget kræver at tal er med punktum. Hvis din regional settings i Windows er sat til dansk, så vil et tal (når det konverteres til en streng) have komma som seperator.
Avatar billede stefan_v Nybegynder
05. oktober 2003 - 22:36 #5
Undskyld det med dobbelt indlæg... My bad!
Jeg vil lige prøve den NumberFormatInfo-klasse... Håber den virker efter hensigten...
Avatar billede stefan_v Nybegynder
06. oktober 2003 - 10:51 #6
Så virker det, mange tak for hjælpen!
Det viste sig at jeg skulle beholde værdierne fra DB, som double-værdier, og ved afsendelse til ny DB-tabel brugte jeg:

  NumberFormatInfo fmt = new NumberFormatInfo();
  fmt.NumberDecimalSeparator = ".";
  fmt.NumberGroupSeparator = "";
  double talTilDB;
  talTilDB.ToString(fmt);

Nu spiller det MAX! :)
Avatar billede stefan_v Nybegynder
06. oktober 2003 - 10:57 #7
Lige en bonuskommentar...
Det var nødvendigt at gemme de nye tal, som float i stedet for decimal, som var det oprindelige format, ellers kom ingen decimaler med...
Kan en eller anden fortælle mig hvordan det hænger sammen? De oprindelige data ligger som decimal-typer (fx 0,83327), men de nye tal bliver afrundet i dette format (til 0). Kan decimal-typen ikke håndtere decimaler??? :-/
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester