|
|||||||
| Contribuez Proposez vos articles, cours, tutoriels, faq, sources pour .NET |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
![]() Date d'inscription: juillet 2004
Localisation: Le cannet
Âge: 31
Messages: 1 608
|
Bonjour a tous,
bon, comme je me suis arrache deux-trois cheveux pour faire une conversion qui marche bien... Code :
private string ArabicToRoman(int arabicNumber, bool isUpperCase) {
string result = string.Empty;
if (arabicNumber == 0) return result;
try {
if (arabicNumber >= 889) {
result = ArabicToRomanHelper(arabicNumber - 1000, "M");
} else if (arabicNumber >= 389) {
result = ArabicToRomanHelper(arabicNumber - 500, "D");
} else if (arabicNumber >= 89) {
result = ArabicToRomanHelper(arabicNumber - 100, "C");
} else if (arabicNumber >= 39) {
result = ArabicToRomanHelper(arabicNumber - 50, "L");
} else if (arabicNumber >= 9) {
result = ArabicToRomanHelper(arabicNumber - 10, "X");
} else if (arabicNumber >= 4) {
result = ArabicToRomanHelper(arabicNumber - 5, "V");
} else if (arabicNumber >= 1) {
result = ArabicToRomanHelper(arabicNumber - 1, "I");
} else if (arabicNumber <= -889) {
result = ArabicToRomanHelper(arabicNumber + 1000, "M");
} else if (arabicNumber <= -389) {
result = ArabicToRomanHelper(arabicNumber + 500, "D");
} else if (arabicNumber <= -89) {
result = ArabicToRomanHelper(arabicNumber + 100, "C");
} else if (arabicNumber <= -39) {
result = ArabicToRomanHelper(arabicNumber + 50, "L");
} else if (arabicNumber <= -9) {
result = ArabicToRomanHelper(arabicNumber + 10, "X");
} else if (arabicNumber <= -4) {
result = ArabicToRomanHelper(arabicNumber + 5, "V");
} else if (arabicNumber <= -1) {
result = ArabicToRomanHelper(arabicNumber + 1, "I");
}
} catch (Exception e) {
result = "Error : " + e.Message;
}
return isUpperCase ? result.ToUpper() : result.ToLower();
}
private string ArabicToRomanHelper(int arabicNumber, string letter) {
if (arabicNumber < 0) {
return ArabicToRoman(arabicNumber, true) + letter;
}
return letter + ArabicToRoman(arabicNumber, true);
}
et la meme en VB (tant qu'a faire...) Code :
Function ArabicToRoman(ByVal arabicNumber AS Integer, Optional ByVal isUpperCase As boolean = true) as string
Dim result as string = string.Empty
if arabicNumber = 0 Then return result
try
if arabicNumber >= 889 then
result = ArabicToRomanHelper(arabicNumber - 1000, "M")
else if arabicNumber >= 389 then
result = ArabicToRomanHelper(arabicNumber - 500, "D")
else if arabicNumber >= 89 then
result = ArabicToRomanHelper(arabicNumber - 100, "C")
else if arabicNumber >= 39 then
result = ArabicToRomanHelper(arabicNumber - 50, "L")
else if arabicNumber >= 9 then
result = ArabicToRomanHelper(arabicNumber - 10, "X")
else if arabicNumber >= 4 then
result = ArabicToRomanHelper(arabicNumber - 5, "V")
else if arabicNumber >= 1 then
result = ArabicToRomanHelper(arabicNumber - 1, "I")
else if arabicNumber <= -889 then
result = ArabicToRomanHelper(arabicNumber + 1000, "M")
else if arabicNumber <= -389 then
result = ArabicToRomanHelper(arabicNumber + 500, "D")
else if arabicNumber <= -89 then
result = ArabicToRomanHelper(arabicNumber + 100, "C")
else if arabicNumber <= -39 then
result = ArabicToRomanHelper(arabicNumber + 50, "L")
else if arabicNumber <= -9 then
result = ArabicToRomanHelper(arabicNumber + 10, "X")
else if arabicNumber <= -4 then
result = ArabicToRomanHelper(arabicNumber + 5, "V")
else if arabicNumber <= -1 then
result = ArabicToRomanHelper(arabicNumber + 1, "I")
end if
catch e as Exception
result = "Error : " & e.Message
end try
if isUpperCase then
return result.ToUpper()
else
return result.ToLower()
end if
end function
Function ArabicToRomanHelper(ByVal arabicNumber as Integer, Byval letter as String) as string
if arabicNumber < 0 then
return ArabicToRoman(arabicNumber, true) + letter
else
return letter + ArabicToRoman(arabicNumber, true)
end if
end function
__________________
Sauf erreur, je ne me trompe jamais. Mon Blog Dernier article publié : Introduction à Subsonic...ou comment vous réconcilier avec votre base de données |
|
|
|
|
|
#2 (permalink) |
![]() |
Pour 47 avec ton code j'obtiens IIIL alors que c'est censé s'écrire XLVII non ?
__________________
The Place Promised in Our Early Days ... Distribution d'applications .NET avec DreamShield DreamShield, Le site, forum, blog, wiki & Jeux Mon blog, les blogs DotNet je ne répondrais aux questions techniques ni par MP ni par email ni par MSN ... le forum est là pour ça |
|
|
|
|
|
#3 (permalink) |
![]() Date d'inscription: juillet 2004
Localisation: Le cannet
Âge: 31
Messages: 1 608
|
ah ?...
euh.... désolé, alors Je remballe , je reteste, je corrige et je reviens en semaine 2
__________________
Sauf erreur, je ne me trompe jamais. Mon Blog Dernier article publié : Introduction à Subsonic...ou comment vous réconcilier avec votre base de données |
|
|
|
|
|
#4 (permalink) |
![]() ![]() Date d'inscription: janvier 2005
Localisation: Yvelines
Âge: 25
Messages: 1 929
|
Sinon t'as une librairie déjà toute faite: http://www.codeproject.com/KB/cs/numberconvert.aspx
__________________
Les règles du forum Le trio magique : FAQ + Cours + fonction rechercher ![]() Mes articles Pas de questions par messages privés svp ![]() Software is never finished, only abandoned. |
|
|
|
|
|
#5 (permalink) | |
![]() Date d'inscription: juillet 2004
Localisation: Le cannet
Âge: 31
Messages: 1 608
|
Citation:
si seulement j'avais trouve ca vendredi matin Merci bcp (n'as plus qu'a scratcher le bout de code que j'avais fait...quoique..Ca marche bien jusqu'a 39
__________________
Sauf erreur, je ne me trompe jamais. Mon Blog Dernier article publié : Introduction à Subsonic...ou comment vous réconcilier avec votre base de données |
|
|
|
|
|
|
#6 (permalink) | |
![]() |
Citation:
Code :
else if arabicNumber >= 39 then
result = ArabicToRomanHelper(arabicNumber - 50, "L")
__________________
The Place Promised in Our Early Days ... Distribution d'applications .NET avec DreamShield DreamShield, Le site, forum, blog, wiki & Jeux Mon blog, les blogs DotNet je ne répondrais aux questions techniques ni par MP ni par email ni par MSN ... le forum est là pour ça |
|
|
|
|
|
|
#7 (permalink) |
![]() Date d'inscription: juillet 2004
Localisation: Le cannet
Âge: 31
Messages: 1 608
|
parce que 40 s'ecrit XL...et j'etais persuade (encore jusqu'a 5 minutes) que 39 -> XIL...
donc, 40 doit d'abord retourner L, puis X en negatif...
__________________
Sauf erreur, je ne me trompe jamais. Mon Blog Dernier article publié : Introduction à Subsonic...ou comment vous réconcilier avec votre base de données |
|
|
|
|
|
#8 (permalink) | |
![]() |
Citation:
Ouai bon bref les chiffres romains c'était en primaire, et c'est bien loin
__________________
The Place Promised in Our Early Days ... Distribution d'applications .NET avec DreamShield DreamShield, Le site, forum, blog, wiki & Jeux Mon blog, les blogs DotNet je ne répondrais aux questions techniques ni par MP ni par email ni par MSN ... le forum est là pour ça |
|
|
|
|
|
|
#9 (permalink) | |
![]() Date d'inscription: juillet 2004
Localisation: Le cannet
Âge: 31
Messages: 1 608
|
Citation:
__________________
Sauf erreur, je ne me trompe jamais. Mon Blog Dernier article publié : Introduction à Subsonic...ou comment vous réconcilier avec votre base de données |
|
|
|
|
|
|
#10 (permalink) |
![]() Date d'inscription: juillet 2004
Localisation: Le cannet
Âge: 31
Messages: 1 608
|
Allez, pour pas laisser tomber l'affaire
Apres correction, ca marche jusqu'a 4000 (au-dela, faut utiliser des caracteres speciaux...) Code C# :
private static string ArabicToRoman(int number, bool isUpperCase) { string result = string.Empty; if (number == 0) return result; try { if (number > 999) { result = ArabicToRomanHelper(number - 1000, "M"); } else if (number > 899) { result = ArabicToRomanHelper(number - 900, "CM"); } else if (number > 499) { result = ArabicToRomanHelper(number - 500, "D"); } else if (number > 399) { result = ArabicToRomanHelper(number - 400, "CD"); } else if (number > 99) { result = ArabicToRomanHelper(number - 100, "C"); } else if (number > 89) { result = ArabicToRomanHelper(number - 90, "XC"); } else if (number > 49) { result = ArabicToRomanHelper(number - 50, "L"); } else if (number > 39) { result = ArabicToRomanHelper(number - 40, "XL"); } else if (number >= 9) { result = ArabicToRomanHelper(number - 10, "X"); } else if (number >= 4) { result = ArabicToRomanHelper(number - 5, "V"); } else if (number >= 1) { result = ArabicToRomanHelper(number - 1, "I"); } else if (number <= -889) { result = ArabicToRomanHelper(number + 1000, "M"); } else if (number <= -389) { result = ArabicToRomanHelper(number + 500, "D"); } else if (number <= -89) { result = ArabicToRomanHelper(number + 100, "C"); } else if (number <= -39) { result = ArabicToRomanHelper(number + 50, "L"); } else if (number <= -9) { result = ArabicToRomanHelper(number + 10, "X"); } else if (number <= -4) { result = ArabicToRomanHelper(number + 5, "V"); } else if (number <= -1) { result = ArabicToRomanHelper(number + 1, "I"); } } catch (Exception e) { result = "Error : " + e.Message; } return isUpperCase ? result.ToUpper() : result.ToLower(); } private static string ArabicToRomanHelper(int number, string letter) { if (number < 0) { return ArabicToRoman(number, true) + letter; } return letter + ArabicToRoman(number, true); } Et la, ca marche
__________________
Sauf erreur, je ne me trompe jamais. Mon Blog Dernier article publié : Introduction à Subsonic...ou comment vous réconcilier avec votre base de données Dernière modification par tomlev ; 10/11/2008 à 13h35. Motif: QUOTE -> CODE |
|
|
|
|
|
#11 (permalink) |
![]() |
![]() En même temps les chiffres romains perdent leur intérêt dès que l'on passe les 50
__________________
The Place Promised in Our Early Days ... Distribution d'applications .NET avec DreamShield DreamShield, Le site, forum, blog, wiki & Jeux Mon blog, les blogs DotNet je ne répondrais aux questions techniques ni par MP ni par email ni par MSN ... le forum est là pour ça |
|
|
|
|
![]() |
![]() |
||
[VB.Net/C#] Convertir un chiffre arabe en chiffre romain
|
||
| Outils de la discussion | |
|
|