[VB.Net/C#] Convertir un chiffre arabe en chiffre romain
Bonjour a tous,
bon, comme je me suis arrache deux-trois cheveux pour faire une conversion qui marche bien...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
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 |
En esperant que ca serve a qqun ;)