Avatar billede tagryggen Nybegynder
27. februar 2003 - 11:02 Der er 17 kommentarer og
1 løsning

decimaltal (komma og punktum)

Jeg søger en måde hvorpå det kan lade sig gøre at benytte danske kommaer i sine decimaltal, der ved compilering omsættes til punktummer, så compileren kan forstå det.

Jeg for så til compileringsfejl fordi jeg har brugt komma.

Er der nogen der har nogen god forslag, for jeg kan da ikke være den eneste der er stødt på dette problem!?!
Avatar billede arnvig Nybegynder
27. februar 2003 - 11:07 #1
Nogle compilere har en preprocessor som tillader redefinition af karakterer og her kan du bytte om på "." og "," .

Generelt er det en dum ide. Væn dig til at bruge "." som decimal punkt, det bliver brugt sådan i alle andre sprog og hvis nogen andre læser dit program , kan det give forståelses problemer.
Avatar billede hsloth Novice
27. februar 2003 - 11:10 #2
arnvig >
At redefinere en karakter - er det ikke det samme som at snyde til eksamen ? ;-)
Avatar billede arne_v Ekspert
27. februar 2003 - 11:11 #3
Den ide tror jeg du kommer til at opgive.

Det kan ikke lade sig gøre med C/C++ syntax.

Det er f.eks. ikke entydigt om f(1,2) så er et kald med to argumenter
eller er f(1.2).
Avatar billede hsloth Novice
27. februar 2003 - 11:14 #4
Måske kunne man lave et snedigt overload af
  int::operator,(int)
som sammensætter de to integers til en float

Komma er jo en operator som kan overloades, ligesom f.eks. + og -.

Den normale komma operator returnerer den sidste værdi, således at

int x = 1,5;

får x til at blive 5

(det her er altså ikke gas)
Avatar billede arnvig Nybegynder
27. februar 2003 - 11:15 #5
Hsloth: Jo, men sig det ikke til nogen, fik ideen fra "Wargames"
Avatar billede hsloth Novice
27. februar 2003 - 11:16 #6
arne_v's pointe er delvis rigtig,

ved et operator overload ville man være nødt til at fortælle compileren at man ville bruge operatoren og ikke et opremsningskomma - dvs kaldet skulle skrives :

f((1,2))
Avatar billede hsloth Novice
27. februar 2003 - 11:17 #7
arnvig>
Min pointe var at det hedder et tegn og ikke en karakter . . .
(der er f.eks. stor forskel på tegnebøge og karaketerbøger)
Avatar billede arnvig Nybegynder
27. februar 2003 - 11:27 #8
Sorry, er opvokset med PL/1, der hedder det en karakter (character).
Ved godt at i unge EDB-fyre kalder tingene noget andet ;-),
men det er svært at lære en gammel hund nye tricks.
Avatar billede dilleberg Nybegynder
27. februar 2003 - 12:54 #9
#include <stdio.h>
#include <locale.h>

int main()
{
  // Get current locale name
  char * szLocaleOld = setlocale(LC_ALL,NULL);

  // Set locale to regional settings
  setlocale(LC_ALL,"");

  // Format according to regional settings
  // "Control Panel -> Regional Options -> Numbers"
  printf("%.2f",123.45);

  // Restore locale
  setlocale(LC_ALL,szLocaleOld);

  return 0;
}

Output
123,45

Testet på Windows 2000, Visual C++

db
Avatar billede arne_v Ekspert
27. februar 2003 - 12:59 #10
dilleberg>

Han snakker om decimal i hans C/C++ kildekode. Ikke i output.
Avatar billede dilleberg Nybegynder
27. februar 2003 - 13:00 #11
Sorry, ovenstående svarer på noget helt andet.

db
Avatar billede dilleberg Nybegynder
27. februar 2003 - 13:01 #12
Men iøvrigt synes jeg ikke det er en god ide at redefinere syntaksen for C/C++ .

db
Avatar billede arne_v Ekspert
27. februar 2003 - 13:04 #13
Det er vi helt enige om !
Avatar billede segmose Nybegynder
27. februar 2003 - 13:19 #14
er dette hvad du spørger om:
#include <stdio.h>
#include <stdlib.h>
#define dansk(a,b) a##.##b

float tal = dansk(1,5);

int main() {
  printf("tal=%f", tal);
  return EXIT_SUCCESS;
}
Avatar billede arnvig Nybegynder
28. februar 2003 - 10:01 #15
problemet er at hvis du redefinerer "," med "."  i et preprocessor statement, så gælder det alle steder ! d.v.s. at argumenter i funktions kald skal adskilles med "."

f.eks: printf("Resultat = ". resultat);

Det vil se knoldet ud og forstyrre meningen
Avatar billede segmose Nybegynder
28. februar 2003 - 10:53 #16
Arnvig : jeg redefinere ikke "," men laver en makro der kræver at
der er 2 argumenter adskilt af ',' men du har ret i at hvis det
var det han ville have så giver det mange problemer.

Det samme som jeg har lavet her kan også laves hvis man selv
laver en float class, hvor constructoren tager flere argumenter.

class Float {
public:
  Float(long heltal, long decimal);
}

og bruges sådan:
float x = Float(1,5);

med passende operator overstyring.
Avatar billede arnvig Nybegynder
28. februar 2003 - 11:33 #17
segmose: Jeg kan godt se at du laver en preprocessor macro,
men det var ikke kommentar til din løsning, bare en generel betragning omkring redefinition af seperator tegn.
Avatar billede tam Nybegynder
01. marts 2003 - 00:31 #18
Som så mange andre har sagt. Det _kan_ (sådan da) lade sig gøre, men lad være....
Hvis der nogen sinde er andre der skal vedligeholde din kode bliver det lidt af et mareridt for dem.
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
Kurser inden for grundlæggende programmering

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