Conversion de nombre en litteraux

Résolu
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016 - 21 août 2007 à 19:20
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 - 23 août 2007 à 12:30
Salut

Je voudrai savoir si quelqu'un a déjà un script qui permet de convertir des nombres en litteraux (en fonction definie par l'utilisateur ou procédures stockées) sinon quel site me conseillez vous pour l'obtenir ?

Merci d'avance

4 réponses

dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
22 août 2007 à 12:46
Voilà un code d'une fonction delphi . A traduire en TSQL:
function TForm1.EnLettres(N:integer):string;


const
  Unite: Array[1..16] of string=('un','deux','trois','quatre','cinq','six',
                                'sept','huit','neuf','dix','onze','douze',
                                'treize','quatorze','quinze','seize');
  Dizaine: Array[2..8] of string=('vingt','trente','quarante','cinquante',
                                 'soixante','','quatre-vingt');
  Coefs:Array[0..3] of string=('cent','mille','million','milliard');
var
  Temp: string;
  C,D,U: Byte;
  Coef: Byte;
  I: Word;
  Neg: boolean;
begin
  if N = 0 then
  begin
    Result := ' Zéro';
    Exit;
  end;
  Result := '';
  Neg := N <0;
  if Neg then N := -N;
  Coef := 0;
  Repeat
    U := N mod 10; N := N div 10; {Récupère unité et dizaine}
    D := N mod 10; N := N div 10; {Récupère dizaine}
    if D in [1,7,9] then
    begin
      Dec(D);
      Inc(U, 10);
    end;
    Temp := '';
    if D > 1 then
    begin
      Temp := ' ' + Dizaine[D];      if (D < 8) and ((U 1) or (U 11)) then
        Temp := Temp + ' et';
    end;
    if U > 16 then
    begin
      Temp := Temp + ' ' + Unite[10];
      Dec(U,10);
    end;
    if U > 0 then Temp := Temp + ' ' + Unite[U];    if (Result '') and (D 8) and (U = 0) then Result := 's';
    Result := Temp + Result;
    C := N mod 10; N := N div 10; {Récupère centaine}
    if C > 0 then
    begin
      Temp := '';
      if C > 1 then Temp := ' ' + Unite[C] + Temp;
      Temp := Temp + ' ' + Coefs[0];
      if (Result = '') and (C > 1) then Result := 's';
      Result := Temp + Result;
    end;
    if N > 0 then
    begin
      Inc(Coef);
      I := N mod 1000;
      if (I > 1) and (Coef > 1) then Result := 's' + Result;
      if I > 0 then Result := ' ' + Coefs[Coef] + Result;      if (I1) and (Coef 1) then Dec(N);
    end;
  until N = 0;
  if Neg then Result := 'Moins' + Result
  else
  Result[2] := UpCase (Result[2]);
end;

Dom
3
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
22 août 2007 à 08:08
Bonjour,
Qu'entends-tu par des "nombres en littéraux" ?
2 = deux ?
ou une variable float en varchar ? (regarde dans l'aide "convert" ou "cast" )

Dom
0
anspauldou Messages postés 42 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 30 juin 2016
22 août 2007 à 12:28
j'entends par convertsion de nombre en littéreaux 2 = deux
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
23 août 2007 à 12:30
Si tu as traduis le code ci-dessus en TSQL , cela m'interresse et je pense ne pas être le seul ...

Dom
0
Rejoignez-nous