Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Function ΟΛΟΓΡΑΦΩΣ

Îåêßíçóå áðü ôï ìÝëïò Chris. Τελευταία δημοσίευση από το μέλος YourFriend στις 19-08-2013, 20:26. Υπάρχουν 16 απαντήσεις.
Σελίδα 1 από 2 (17 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-05-2005, 16:26 1933

    Function ΟΛΟΓΡΑΦΩΣ

    Καλημέρα!

    Μήπως έχει φτιάξει κανείς συνάρτηση για να αναγράφονται τα ποσά ολογράφως στα Ελληνικά; Βρήκα την αγγλική στo Report 1401 αλλά για να αλλαχτεί στα Ελληνικά θέλει δουλίτσα... Αν λοιπόν κάποιος μπορεί να βοηθήσει...

    Αλέξανδρος
  •  12-05-2005, 15:55 1947 σε απάντηση της 1933

    Re: Function ΟΛΟΓΡΑΦΩΣ

    Public Function GetMoneyVerbage(ByVal Amount As Decimal) As String
      'Developed by [email protected]
      Try
       Dim PrefixPart As String = String.Empty
       Dim CentsPart As String = String.Empty
       Dim CurrencyPart As String = String.Empty
       Dim SmallPart As String = String.Empty
       Dim ThousandsPart As String = String.Empty
       Dim MillionsPart As String = String.Empty
       Dim BillionsPart As String = String.Empty

       Dim Cents As Integer
       Dim Small As Integer
       Dim Thousands As Integer
       Dim Millions As Integer
       Dim Billions As Integer

       Dim SmallH As Integer
       Dim ThousandsH As Integer
       Dim MillionsH As Integer
       Dim BillionsH As Integer

       Dim SmallN As Integer
       Dim ThousandsN As Integer
       Dim MillionsN As Integer
       Dim BillionsN As Integer

       Dim TN(100) As String
       Dim TF(100) As String
       Dim HN(10) As String
       Dim HF(10) As String

       HN(0) = ""
       HN(1) = "εκατόν"
       HN(2) = "διακόσια"
       HN(3) = "τριακόσια"
       HN(4) = "τετρακόσια"
       HN(5) = "πεντακόσια"
       HN(6) = "εξακόσια"
       HN(7) = "επτακόσια"
       HN(8) = "οκτακόσια"
       HN(9) = "εννιακόσια"

       HF(0) = ""
       HF(1) = "εκατόν"
       HF(2) = "διακόσιες"
       HF(3) = "τριακόσιες"
       HF(4) = "τετρακόσιες"
       HF(5) = "πεντακόσιες"
       HF(6) = "εξακόσιες"
       HF(7) = "επτακόσιες"
       HF(8) = "οκτακόσιες"
       HF(9) = "εννιακόσιες"

       TN(0) = ""
       TN(1) = "ένα"
       TN(2) = "δύο"
       TN(3) = "τρία"
       TN(4) = "τέσσερα"
       TN(5) = "πέντε"
       TN(6) = "έξι"
       TN(7) = "επτά"
       TN(8) = "οκτώ"
       TN(9) = "εννέα"
       TN(10) = "δέκα"
       TN(11) = "έντεκα"
       TN(12) = "δώδεκα"
       TN(13) = "δεκατρία"
       TN(14) = "δεκατέσσερα"
       TN(15) = "δεκαπέντε"
       TN(16) = "δεκαέξι"
       TN(17) = "δεκαεπτά"
       TN(18) = "δεκαοκτώ"
       TN(19) = "δεκαεννέα"
       TN(20) = "είκοσι"
       TN(21) = "εικοσιένα"
       TN(22) = "εικοσιδύο"
       TN(23) = "εικοσιτρία"
       TN(24) = "εικοσιτέσσερα"
       TN(25) = "εικοσιπέντε"
       TN(26) = "εικοσιέξι"
       TN(27) = "εικοσιεπτά"
       TN(28) = "εικοσιοκτώ"
       TN(29) = "εικοσιεννέα"
       TN(30) = "τριάντα"
       TN(31) = "τριανταένα"
       TN(32) = "τριανταδύο"
       TN(33) = "τριαντατρία"
       TN(34) = "τριαντατέσσερα"
       TN(35) = "τριανταπέντε"
       TN(36) = "τριανταέξι"
       TN(37) = "τριανταεπτά"
       TN(38) = "τριανταοκτώ"
       TN(39) = "τριανταεννέα"
       TN(40) = "σαράντα"
       TN(41) = "σαρανταένα"
       TN(42) = "σαρανταδύο"
       TN(43) = "σαραντατρία"
       TN(44) = "σαραντατέσσερα"
       TN(45) = "σαρανταπέντε"
       TN(46) = "σαρανταέξι"
       TN(47) = "σαρανταεπτά"
       TN(48) = "σαρανταοκτώ"
       TN(49) = "σαρανταεννέα"
       TN(50) = "πενήντα"
       TN(51) = "πενηνταένα"
       TN(52) = "πενηνταδύο"
       TN(53) = "πενηντατρία"
       TN(54) = "πενηντατέσσερα"
       TN(55) = "πενηνταπέντε"
       TN(56) = "πενηνταέξι"
       TN(57) = "πενηνταεπτά"
       TN(58) = "πενηνταοκτώ"
       TN(59) = "πενηνταεννέα"
       TN(60) = "εξήντα"
       TN(61) = "εξηνταένα"
       TN(62) = "εξηνταδύο"
       TN(63) = "εξηντατρία"
       TN(64) = "εξηντατέσσερα"
       TN(65) = "εξηνταπέντε"
       TN(66) = "εξηνταέξι"
       TN(67) = "εξηνταεπτά"
       TN(68) = "εξηνταοκτώ"
       TN(69) = "εξηνταεννέα"
       TN(70) = "εβδομήντα"
       TN(71) = "εβδομηνταένα"
       TN(72) = "εβδομηνταδύο"
       TN(73) = "εβδομηντατρία"
       TN(74) = "εβδομηντατέσσερα"
       TN(75) = "εβδομηνταπέντε"
       TN(76) = "εβδομηνταέξι"
       TN(77) = "εβδομηνταεπτά"
       TN(78) = "εβδομηνταοκτώ"
       TN(79) = "εβδομηνταεννέα"
       TN(80) = "ογδόντα"
       TN(81) = "ογδονταένα"
       TN(82) = "ογδονταδύο"
       TN(83) = "ογδοντατρία"
       TN(84) = "ογδοντατέσσερα"
       TN(85) = "ογδονταπέντε"
       TN(86) = "ογδονταέξι"
       TN(87) = "ογδονταεπτά"
       TN(88) = "ογδονταοκτώ"
       TN(89) = "ογδονταεννέα"
       TN(90) = "εννενήντα"
       TN(91) = "ενεννηνταένα"
       TN(92) = "ενεννηνταδύο"
       TN(93) = "ενεννηντατρία"
       TN(94) = "ενεννηντατέσσερα"
       TN(95) = "ενεννηνταπέντε"
       TN(96) = "ενεννηνταέξι"
       TN(97) = "ενεννηνταεπτά"
       TN(98) = "ενεννηνταοκτώ"
       TN(99) = "ενεννηνταεννέα"

       TF(0) = ""
       TF(1) = "μία"
       TF(2) = "δύο"
       TF(3) = "τρείς"
       TF(4) = "τέσσερις"
       TF(5) = "πέντε"
       TF(6) = "έξι"
       TF(7) = "επτά"
       TF(8) = "οκτώ"
       TF(9) = "εννέα"
       TF(10) = "δέκα"
       TF(11) = "έντεκα"
       TF(12) = "δώδεκα"
       TF(13) = "δεκατρείς"
       TF(14) = "δεκατέσσερις"
       TF(15) = "δεκαπέντε"
       TF(16) = "δεκαέξι"
       TF(17) = "δεκαεπτά"
       TF(18) = "δεκαοκτώ"
       TF(19) = "δεκαεννέα"
       TF(20) = "είκοσι"
       TF(21) = "εικοσιμία"
       TF(22) = "εικοσιδύο"
       TF(23) = "εικοσιτρείς"
       TF(24) = "εικοσιτέσσερις"
       TF(25) = "εικοσιπέντε"
       TF(26) = "εικοσιέξι"
       TF(27) = "εικοσιεπτά"
       TF(28) = "εικοσιοκτώ"
       TF(29) = "εικοσιεννέα"
       TF(30) = "τριάντα"
       TF(31) = "τριανταμία"
       TF(32) = "τριανταδύο"
       TF(33) = "τριαντατρείς"
       TF(34) = "τριαντατέσσερις"
       TF(35) = "τριανταπέντε"
       TF(36) = "τριανταέξι"
       TF(37) = "τριανταεπτά"
       TF(38) = "τριανταοκτώ"
       TF(39) = "τριανταεννέα"
       TF(40) = "σαράντα"
       TF(41) = "σαρανταμία"
       TF(42) = "σαρανταδύο"
       TF(43) = "σαραντατρείς"
       TF(44) = "σαραντατέσσερις"
       TF(45) = "σαρανταπέντε"
       TF(46) = "σαρανταέξι"
       TF(47) = "σαρανταεπτά"
       TF(48) = "σαρανταοκτώ"
       TF(49) = "σαρανταεννέα"
       TF(50) = "πενήντα"
       TF(51) = "πενηνταμία"
       TF(52) = "πενηνταδύο"
       TF(53) = "πενηντατρείς"
       TF(54) = "πενηντατέσσερις"
       TF(55) = "πενηνταπέντε"
       TF(56) = "πενηνταέξι"
       TF(57) = "πενηνταεπτά"
       TF(58) = "πενηνταοκτώ"
       TF(59) = "πενηνταεννέα"
       TF(60) = "εξήντα"
       TF(61) = "εξηνταμία"
       TF(62) = "εξηνταδύο"
       TF(63) = "εξηντατρείς"
       TF(64) = "εξηντατέσσερις"
       TF(65) = "εξηνταπέντε"
       TF(66) = "εξηνταέξι"
       TF(67) = "εξηνταεπτά"
       TF(68) = "εξηνταοκτώ"
       TF(69) = "εξηνταεννέα"
       TF(70) = "εβδομήντα"
       TF(71) = "εβδομηνταμία"
       TF(72) = "εβδομηνταδύο"
       TF(73) = "εβδομηντατρείς"
       TF(74) = "εβδομηντατέσσερις"
       TF(75) = "εβδομηνταπέντε"
       TF(76) = "εβδομηνταέξι"
       TF(77) = "εβδομηνταεπτά"
       TF(78) = "εβδομηνταοκτώ"
       TF(79) = "εβδομηνταεννέα"
       TF(80) = "ογδόντα"
       TF(81) = "ογδονταμία"
       TF(82) = "ογδονταδύο"
       TF(83) = "ογδοντατρείς"
       TF(84) = "ογδοντατέσσερις"
       TF(85) = "ογδονταπέντε"
       TF(86) = "ογδονταέξι"
       TF(87) = "ογδονταεπτά"
       TF(88) = "ογδονταοκτώ"
       TF(89) = "ογδονταεννέα"
       TF(90) = "εννενήντα"
       TF(91) = "ενεννηνταμία"
       TF(92) = "ενεννηνταδύο"
       TF(93) = "ενεννηντατρείς"
       TF(94) = "ενεννηντατέσσερις"
       TF(95) = "ενεννηνταπέντε"
       TF(96) = "ενεννηνταέξι"
       TF(97) = "ενεννηνταεπτά"
       TF(98) = "ενεννηνταοκτώ"
       TF(99) = "ενεννηνταεννέα"

       If Amount = 0 Then Return "μηδέν ευρώ"

       If Amount < 0 Then
        Amount = -Amount
        PrefixPart = "μείον "
       End If

       Cents = Math.Round(100 * (Amount - Int(Amount)), 0)
       If Cents > 0 Then
        If Amount >= 1 Then
         If Cents = 1 Then
          CentsPart = "και ένα λεπτό"
         Else
          CentsPart = "και " & TN(Cents) & " λεπτά"
         End If
        Else
         If Cents = 1 Then
          CentsPart = "ένα λεπτό"
         Else
          CentsPart = TN(Cents) & " λεπτά"
         End If
        End If
       End If

       If Amount >= 1 Then
        CurrencyPart = " ευρώ"
       End If

       Billions = Int(Amount / (10 ^ 9))
       Millions = Int(Int(Amount - Billions * (10 ^ 9)) / (10 ^ 6))
       Thousands = Int(Int(Amount - Billions * (10 ^ 9) - Millions * (10 ^ 6)) / (10 ^ 3))
       Small = Int(Amount - Billions * (10 ^ 9) - Millions * (10 ^ 6) - Thousands * (10 ^ 3))

       BillionsH = Int(Billions / 100)
       MillionsH = Int(Millions / 100)
       ThousandsH = Int(Thousands / 100)
       SmallH = Int(Small / 100)

       SmallN = Small - SmallH * 100
       ThousandsN = Thousands - ThousandsH * 100
       MillionsN = Millions - MillionsH * 100
       BillionsN = Billions - BillionsH * 100

       If Small = 100 Then
        SmallPart = "εκατό"
       Else
        SmallPart = HN(SmallH) & " " & TN(SmallN)
       End If

       If Thousands = 1 Then
        ThousandsPart = " χίλια"
       Else
        If Thousands = 100 Then
         ThousandsPart = "εκατό χιλιάδες"
        Else
         If Thousands > 0 Then ThousandsPart = HF(ThousandsH) & " " & TF(ThousandsN) & " χιλιάδες"
        End If
       End If

       If Millions = 1 Then
        MillionsPart = "ένα εκατομμύριο"
       Else
        If Millions = 100 Then
         MillionsPart = "εκατό εκατομύρια"
        Else
         If Millions > 0 Then MillionsPart = HN(MillionsH) & " " & TN(MillionsN) & " εκατομμύρια"
        End If
       End If

       If Billions = 1 Then
        BillionsPart = "ένα δισεκατομμύριο"
       Else
        If Billions = 100 Then
         BillionsPart = "εκατό δισεκατομμύρια"
        Else
         If Billions > 0 Then BillionsPart = HN(BillionsH) & " " & TN(BillionsN) & " δισεκατομμύρια"
        End If
       End If

       Return Trim(PrefixPart & BillionsPart & " " & MillionsPart & " " & ThousandsPart & " " & SmallPart & CurrencyPart & " " & CentsPart)
      Catch
       Return Trim(Amount.ToString)
      End Try
     End Function


    Χρήστος Γεωργακόπουλος
  •  18-05-2005, 12:23 2035 σε απάντηση της 1947

    Re: Function ΟΛΟΓΡΑΦΩΣ

    Μάστορα είσαι πολύ ωραίος!
    Ευχαριστώ πάρα πολύ! [8-|]

  •  24-05-2007, 13:10 32195 σε απάντηση της 2035

    Απ: Re: Function ΟΛΟΓΡΑΦΩΣ

    Για όποιον ενδιαφέρεται, ακολουθεί έκδοση σε C# της εξαιρετικής αυτής μεθόδου του Χρήστου Γεωργακόπουλου.

    public static string GetMoneyVerbage(decimal Amount)
    {
    try
    {
    string PrefixPart = string.Empty;
    string CentsPart = string.Empty;
    string CurrencyPart = string.Empty;
    string SmallPart = string.Empty;
    string ThousandsPart = string.Empty;
    string MillionsPart = string.Empty;
    string BillionsPart = string.Empty;
    int Cents;
    int Small;
    int Thousands;
    int Millions;
    int Billions;
    int SmallH;
    int ThousandsH;
    int MillionsH;
    int BillionsH;
    int SmallN;
    int ThousandsN;
    int MillionsN;
    int BillionsN;
    string[] TN = new string[100];
    string[] TF = new string[100];
    string[] HN = new string[10];
    string[] HF = new string[10];
    HN[0] = "";
    HN[1] = "εκατόν";
    HN[2] = "διακόσια";
    HN[3] = "τριακόσια";
    HN[4] = "τετρακόσια";
    HN[5] = "πεντακόσια";
    HNDevil = "εξακόσια";
    HN[7] = "επτακόσια";
    HNMusic = "οκτακόσια";
    HN[9] = "εννιακόσια";
    HF[0] = "";
    HF[1] = "εκατόν";
    HF[2] = "διακόσιες";
    HF[3] = "τριακόσιες";
    HF[4] = "τετρακόσιες";
    HF[5] = "πεντακόσιες";
    HFDevil = "εξακόσιες";
    HF[7] = "επτακόσιες";
    HFMusic = "οκτακόσιες";
    HF[9] = "εννιακόσιες";
    TN[0] = "";
    TN[1] = "ένα";
    TN[2] = "δύο";
    TN[3] = "τρία";
    TN[4] = "τέσσερα";
    TN[5] = "πέντε";
    TNDevil = "έξι";
    TN[7] = "επτά";
    TNMusic = "οκτώ";
    TN[9] = "εννέα";
    TN[10] = "δέκα";
    TN[11] = "έντεκα";
    TN[12] = "δώδεκα";
    TN[13] = "δεκατρία";
    TN[14] = "δεκατέσσερα";
    TN[15] = "δεκαπέντε";
    TN[16] = "δεκαέξι";
    TN[17] = "δεκαεπτά";
    TN[18] = "δεκαοκτώ";
    TN[19] = "δεκαεννέα";
    TN[20] = "είκοσι";
    TN[21] = "εικοσιένα";
    TN[22] = "εικοσιδύο";
    TN[23] = "εικοσιτρία";
    TN[24] = "εικοσιτέσσερα";
    TN[25] = "εικοσιπέντε";
    TN[26] = "εικοσιέξι";
    TN[27] = "εικοσιεπτά";
    TN[28] = "εικοσιοκτώ";
    TN[29] = "εικοσιεννέα";
    TN[30] = "τριάντα";
    TN[31] = "τριανταένα";
    TN[32] = "τριανταδύο";
    TN[33] = "τριαντατρία";
    TN[34] = "τριαντατέσσερα";
    TN[35] = "τριανταπέντε";
    TN[36] = "τριανταέξι";
    TN[37] = "τριανταεπτά";
    TN[38] = "τριανταοκτώ";
    TN[39] = "τριανταεννέα";
    TN[40] = "σαράντα";
    TN[41] = "σαρανταένα";
    TN[42] = "σαρανταδύο";
    TN[43] = "σαραντατρία";
    TN[44] = "σαραντατέσσερα";
    TN[45] = "σαρανταπέντε";
    TN[46] = "σαρανταέξι";
    TN[47] = "σαρανταεπτά";
    TN[48] = "σαρανταοκτώ";
    TN[49] = "σαρανταεννέα";
    TN[50] = "πενήντα";
    TN[51] = "πενηνταένα";
    TN[52] = "πενηνταδύο";
    TN[53] = "πενηντατρία";
    TN[54] = "πενηντατέσσερα";
    TN[55] = "πενηνταπέντε";
    TN[56] = "πενηνταέξι";
    TN[57] = "πενηνταεπτά";
    TN[58] = "πενηνταοκτώ";
    TN[59] = "πενηνταεννέα";
    TN[60] = "εξήντα";
    TN[61] = "εξηνταένα";
    TN[62] = "εξηνταδύο";
    TN[63] = "εξηντατρία";
    TN[64] = "εξηντατέσσερα";
    TN[65] = "εξηνταπέντε";
    TN[66] = "εξηνταέξι";
    TN[67] = "εξηνταεπτά";
    TN[68] = "εξηνταοκτώ";
    TN[69] = "εξηνταεννέα";
    TN[70] = "εβδομήντα";
    TN[71] = "εβδομηνταένα";
    TN[72] = "εβδομηνταδύο";
    TN[73] = "εβδομηντατρία";
    TN[74] = "εβδομηντατέσσερα";
    TN[75] = "εβδομηνταπέντε";
    TN[76] = "εβδομηνταέξι";
    TN[77] = "εβδομηνταεπτά";
    TN[78] = "εβδομηνταοκτώ";
    TN[79] = "εβδομηνταεννέα";
    TN[80] = "ογδόντα";
    TN[81] = "ογδονταένα";
    TN[82] = "ογδονταδύο";
    TN[83] = "ογδοντατρία";
    TN[84] = "ογδοντατέσσερα";
    TN[85] = "ογδονταπέντε";
    TN[86] = "ογδονταέξι";
    TN[87] = "ογδονταεπτά";
    TN[88] = "ογδονταοκτώ";
    TN[89] = "ογδονταεννέα";
    TN[90] = "εννενήντα";
    TN[91] = "ενεννηνταένα";
    TN[92] = "ενεννηνταδύο";
    TN[93] = "ενεννηντατρία";
    TN[94] = "ενεννηντατέσσερα";
    TN[95] = "ενεννηνταπέντε";
    TN[96] = "ενεννηνταέξι";
    TN[97] = "ενεννηνταεπτά";
    TN[98] = "ενεννηνταοκτώ";
    TN[99] = "ενεννηνταεννέα";
    TF[0] = "";
    TF[1] = "μία";
    TF[2] = "δύο";
    TF[3] = "τρείς";
    TF[4] = "τέσσερις";
    TF[5] = "πέντε";
    TFDevil = "έξι";
    TF[7] = "επτά";
    TFMusic = "οκτώ";
    TF[9] = "εννέα";
    TF[10] = "δέκα";
    TF[11] = "έντεκα";
    TF[12] = "δώδεκα";
    TF[13] = "δεκατρείς";
    TF[14] = "δεκατέσσερις";
    TF[15] = "δεκαπέντε";
    TF[16] = "δεκαέξι";
    TF[17] = "δεκαεπτά";
    TF[18] = "δεκαοκτώ";
    TF[19] = "δεκαεννέα";
    TF[20] = "είκοσι";
    TF[21] = "εικοσιμία";
    TF[22] = "εικοσιδύο";
    TF[23] = "εικοσιτρείς";
    TF[24] = "εικοσιτέσσερις";
    TF[25] = "εικοσιπέντε";
    TF[26] = "εικοσιέξι";
    TF[27] = "εικοσιεπτά";
    TF[28] = "εικοσιοκτώ";
    TF[29] = "εικοσιεννέα";
    TF[30] = "τριάντα";
    TF[31] = "τριανταμία";
    TF[32] = "τριανταδύο";
    TF[33] = "τριαντατρείς";
    TF[34] = "τριαντατέσσερις";
    TF[35] = "τριανταπέντε";
    TF[36] = "τριανταέξι";
    TF[37] = "τριανταεπτά";
    TF[38] = "τριανταοκτώ";
    TF[39] = "τριανταεννέα";
    TF[40] = "σαράντα";
    TF[41] = "σαρανταμία";
    TF[42] = "σαρανταδύο";
    TF[43] = "σαραντατρείς";
    TF[44] = "σαραντατέσσερις";
    TF[45] = "σαρανταπέντε";
    TF[46] = "σαρανταέξι";
    TF[47] = "σαρανταεπτά";
    TF[48] = "σαρανταοκτώ";
    TF[49] = "σαρανταεννέα";
    TF[50] = "πενήντα";
    TF[51] = "πενηνταμία";
    TF[52] = "πενηνταδύο";
    TF[53] = "πενηντατρείς";
    TF[54] = "πενηντατέσσερις";
    TF[55] = "πενηνταπέντε";
    TF[56] = "πενηνταέξι";
    TF[57] = "πενηνταεπτά";
    TF[58] = "πενηνταοκτώ";
    TF[59] = "πενηνταεννέα";
    TF[60] = "εξήντα";
    TF[61] = "εξηνταμία";
    TF[62] = "εξηνταδύο";
    TF[63] = "εξηντατρείς";
    TF[64] = "εξηντατέσσερις";
    TF[65] = "εξηνταπέντε";
    TF[66] = "εξηνταέξι";
    TF[67] = "εξηνταεπτά";
    TF[68] = "εξηνταοκτώ";
    TF[69] = "εξηνταεννέα";
    TF[70] = "εβδομήντα";
    TF[71] = "εβδομηνταμία";
    TF[72] = "εβδομηνταδύο";
    TF[73] = "εβδομηντατρείς";
    TF[74] = "εβδομηντατέσσερις";
    TF[75] = "εβδομηνταπέντε";
    TF[76] = "εβδομηνταέξι";
    TF[77] = "εβδομηνταεπτά";
    TF[78] = "εβδομηνταοκτώ";
    TF[79] = "εβδομηνταεννέα";
    TF[80] = "ογδόντα";
    TF[81] = "ογδονταμία";
    TF[82] = "ογδονταδύο";
    TF[83] = "ογδοντατρείς";
    TF[84] = "ογδοντατέσσερις";
    TF[85] = "ογδονταπέντε";
    TF[86] = "ογδονταέξι";
    TF[87] = "ογδονταεπτά";
    TF[88] = "ογδονταοκτώ";
    TF[89] = "ογδονταεννέα";
    TF[90] = "εννενήντα";
    TF[91] = "ενεννηνταμία";
    TF[92] = "ενεννηνταδύο";
    TF[93] = "ενεννηντατρείς";
    TF[94] = "ενεννηντατέσσερις";
    TF[95] = "ενεννηνταπέντε";
    TF[96] = "ενεννηνταέξι";
    TF[97] = "ενεννηνταεπτά";
    TF[98] = "ενεννηνταοκτώ";
    TF[99] = "ενεννηνταεννέα";
    if (Amount == 0)
    {
    return "μηδέν ευρώ";
    }
    if (Amount < 0)
    {
    Amount = -Amount;
    PrefixPart = "μείον ";
    }
    Cents = Convert.ToInt32(Math.Round(100 * (Amount - Convert.ToInt32(Math.Floor(Convert.ToDouble(Amount)))), 0));
    if (Cents > 0)
    {
    if (Amount >= 1)
    {
    if (Cents == 1)
    {
    CentsPart = "και ένα λεπτό";
    }
    else
    {
    CentsPart = "και " + TN[Cents] + " λεπτά";
    }
    }
    else
    {
    if (Cents == 1)
    {
    CentsPart = "ένα λεπτό";
    }
    else
    {
    CentsPart = TN[Cents] + " λεπτά";
    }
    }
    }
    if (Amount >= 1)
    {
    CurrencyPart = " ευρώ";
    }
    Billions = Convert.ToInt32(Math.Floor(Convert.ToDouble(Convert.ToDouble(Amount) / (Math.Pow(10, 9)))));
    Millions = Convert.ToInt32(Math.Floor(Convert.ToDouble(Convert.ToInt32(Convert.ToDouble(Amount) - Billions * (Math.Pow(10, 9))) / (Math.Pow(10, 6)))));
    Thousands = Convert.ToInt32(Math.Floor(Convert.ToDouble(Convert.ToInt32(Convert.ToDouble(Amount) - Billions * (Math.Pow(10, 9)) - Millions * (Math.Pow(10, 6))) / (Math.Pow(10, 3)))));
    Small = Convert.ToInt32(Math.Floor(Convert.ToDouble(Convert.ToDouble(Amount) - Billions * (Math.Pow(10, 9)) - Millions * (Math.Pow(10, 6)) - Thousands * (Math.Pow(10, 3)))));
    BillionsH = Convert.ToInt32(Billions / 100);
    MillionsH = Convert.ToInt32(Millions / 100);
    ThousandsH = Convert.ToInt32(Thousands / 100);
    SmallH = Convert.ToInt32(Small / 100);
    SmallN = Small - SmallH * 100;
    ThousandsN = Thousands - ThousandsH * 100;
    MillionsN = Millions - MillionsH * 100;
    BillionsN = Billions - BillionsH * 100;
    if (Small == 100)
    {
    SmallPart = "εκατό";
    }
    else
    {
    SmallPart = HN[SmallH] + " " + TN[SmallN];
    }
    if (Thousands == 1)
    {
    ThousandsPart = " χίλια";
    }
    else
    {
    if (Thousands == 100)
    {
    ThousandsPart = "εκατό χιλιάδες";
    }
    else
    {
    if (Thousands > 0)
    {
    ThousandsPart = HF[ThousandsH] + " " + TF[ThousandsN] + " χιλιάδες";
    }
    }
    }
    if (Millions == 1)
    {
    MillionsPart = "ένα εκατομμύριο";
    }
    else
    {
    if (Millions == 100)
    {
    MillionsPart = "εκατό εκατομύρια";
    }
    else
    {
    if (Millions > 0)
    {
    MillionsPart = HN[MillionsH] + " " + TN[MillionsN] + " εκατομμύρια";
    }
    }
    }
    if (Billions == 1)
    {
    BillionsPart = "ένα δισεκατομμύριο";
    }
    else
    {
    if (Billions == 100)
    {
    BillionsPart = "εκατό δισεκατομμύρια";
    }
    else
    {
    if (Billions > 0)
    {
    BillionsPart = HN[BillionsH] + " " + TN[BillionsN] + " δισεκατομμύρια";
    }
    }
    }
    string verbage = (PrefixPart + BillionsPart + " " + MillionsPart + " " + ThousandsPart + " " + SmallPart + CurrencyPart + " " + CentsPart);
    return verbage.Trim();
    }
    catch (Exception exc)
    {
    return Amount.ToString().Trim();
    }
    }


    .::yf::.
  •  18-06-2007, 16:26 33018 σε απάντηση της 1933

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Ιδού και η δική μου υλοποίηση σε vb.net που χρησιμοποιεί λιγότερη μνήμη, είναι μικρότερη και φτάνει στο άπειρο (καλά μη τρελαθούμε κι όλας, μέχρι εκεί που φθάνει ο double όπως είναι τώρα, αλλά με πολύ μικρή τροποποίηση μπορεί να φθάσει περισσότερο, το μόνο που έχεις να κάνεις είναι να προσθέσεις στο idx() τις κατάλληλες λέξεις μετά το πεντάκις Stick out tongue).

    Public Class Money
        Shared ReadOnly m() As String = {"", "ΕΝΑ ", "ΔΥΟ ", "ΤΡΙΑ ", "ΤΕΣΣΕΡΑ ", "ΠΕΝΤΕ ", "ΕΞΙ ", "ΕΠΤΑ ", "ΟΚΤΩ ", "ΕΝΝΕΑ "}
        Shared ReadOnly mF() As String = {"", "ΜΙΑ ", "", "ΤΡΕΙΣ ", "ΤΕΣΣΕΡΙΣ "}
        Shared ReadOnly d() As String = {"", "ΔΕΚΑ", "ΕΙΚΟΣΙ ", "ΤΡΙΑΝΤΑ ", "ΣΑΡΑΝΤΑ ", "ΠΕΝΗΝΤΑ ", "ΕΞΗΝΤΑ ", "ΕΒΔΟΜΗΝΤΑ ", "ΟΓΔΟΝΤΑ ", "ΕΝΕΝΗΝΤΑ "}
        Shared ReadOnly e() As String = {"", "ΕΚΑΤΟ", "ΔΙΑΚΟΣΙ", "ΤΡΙΑΚΟΣΙ", "ΤΕΤΡΑΚΟΣΙ", "ΠΕΝΤΑΚΟΣΙ", "ΕΞΑΚΟΣΙ", "ΕΠΤΑΚΟΣΙ", "ΟΚΤΑΚΟΣΙ", "ΕΝΝΙΑΚΟΣΙ"}
        Shared ReadOnly idx() As String = {"ΛΕΠΤΑ", "ΕΥΡΩ ", "ΧΙΛΙΑΔΕΣ ", "ΕΚΑΤΟΜΜΥΡΙA ", "ΔΙΣ ", "ΤΡΙΣ ", "ΤΕΤΡΑΚΙΣ ", "ΠΕΝΤΑΚΙΣ "}

        Public Shared Function GetVerbalMoney(ByVal money As Double) As String
            Dim str As String = ""
            Dim index As Byte = 0
            If Not money = Int(money) Then str = "ΚΑΙ " & GetValue(
    Int(Math.Round(money - Int(money), 2) * 100, index)
                Do While money >= 1
                    money /= 1000
                    index += 1
                    str = GetValue(Int(Math.Round(money - Int(money), 3) * 1000), index) & str 
                   
    'Για έναν περίεργο λόγο χρειάζεται το Math.Round γιατί οι πράξεις
                    'δε γίνονται σωστά. Δηλ. 2.15-2.0=0.14999999.Μπορεί να μου το εξηγήσει κάποιος;
                    'Είναι feature της VB μάλλον...

               
    Loop
            Return str
        End Function

        Private Shared Function GetValue(ByVal money As Short, ByVal index As Byte)
            Dim str As String = ""
            Dim ekatontades As Byte = Int(money / 100)
            Dim dekades As Byte = Int((money - ekatontades * 100) / 10)
            Dim monades As Byte = money - ekatontades * 100 - dekades * 10

            'EKATONTADES

            If Not ekatontades = 0 Then
                If ekatontades = 1 Then
                    If dekades = 0 AndAlso monades = 0 Then
                        str = e(1) & " "
                    Else
                        str = e(1) & "Ν "
                    End If
                Else
                    If index = 2 Then str = e(ekatontades) & "ΕΣ " Else str = e(ekatontades) & "Α "
                End If
            End If
           
            'DEKADES

            If dekades = 1 Then
                Select Case monades
                    Case 0 : str += " "
                    Case 1 : str += "ΕΝΤΕΚΑ "
                    Case 2 : str += "ΔΩΔΕΚΑ "
                    Case Else : str += d(dekades)
                End Select
            Else
                str += d(dekades)
            End If
           
            'MONADES

            If index = 2 AndAlso monades = 1 Then
                str += "ΧΙΛΙΑ "
            ElseIf index = 3 AndAlso monades = 1 Then
                str += "ΕΝΑ ΕΚΑΤΟΜΜΥΡΙΟ "
            Else
                If index = 2 AndAlso (monades = 1 Or monades = 3 Or monades = 4) Then
                    str += mF(monades)
                Else
                    If Not (dekades = 1 And (monades = 1 Or monades = 2)) Then
                        str += m(monades)
                    End If
                End If
                If str <> "" Or index = 1 Then str += idx(index)
            End If
            Return str
        End Function
    End Class



    Την έχω φτιάξει να είναι αυτόνομη κλάση με μία Public Shared Function και δουλεύει πολύ απλά:
    πχ. MsgBox(Money.GetVerbalMoney(123456789))

    Panos
  •  18-06-2007, 19:28 33023 σε απάντηση της 33018

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    panos_sniper:

    'Για έναν περίεργο λόγο χρειάζεται το Math.Round γιατί οι πράξεις
    'δε γίνονται σωστά. Δηλ. 2.15-2.0=0.14999999.Μπορεί να μου το εξηγήσει κάποιος;
    'Είναι feature της VB μάλλον...



    Στην πραγματικότητα είναι "feature" της αναπαράστασης του double κατά το πρότυπο IEEE 954 με κινητή υποδιαστολή. Στην παράσταση αυτή, οι δεκαδικοί αριθμοί δεν παριστάνονται με ακρίβεια, και μάλιστα η ακρίβειά τους μειώνεται όσο αυξάνεται το (απόλυτο) μέγεθός τους. Αυτό έχει το μειονέκτημα που παρατήρησες, αλλά την ίδια στιγμή δίνει τη δυνατότητα της παράστασης πολύ μικρών κατ' απόλυτη τιμή αριθμών και πολύ μεγάλων χρησιμοποιώντας σταθερό αριθμό bits.
    Όπου απαιτείται ακρίβεια στις δεκαδικές πράξεις (π.χ. αξιακά δεδομένα) χρησιμοποιούνται τύποι σαν τον decimal που έχουν δεκαδική ακρίβεια.

    Νατάσα Μανουσοπούλου
  •  19-06-2007, 09:52 33030 σε απάντηση της 33023

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Α, οπότε αλλάζοντας τον τύπο της function από double σε decimal δεν έχω πρόβλημα. Thanks!

    Panos
  •  29-05-2008, 02:29 42476 σε απάντηση της 33030

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Μετά από 1 χρόνο περίπου είπα κι εγώ να χρησιμοποιήσω τον κώδικα του panos_sniper. Οπότε έριξα μια μετάφραση σε C# (αλλά μάλλον θα πέσει και 2η μετάφραση για να γίνει Win32 dll), έριξα και... "τρία κιλά κώδικα" ...για να εμφανίζει το ΜΗΔΕΝ ΕΥΡΩ, να παίρνει αρνητικά ποσά, να μην εμφανίζει νομίσματα (ευρώ και λεπτά, παρά μόνο το ποσό), λίγο debugging (για τα μάτια του κόσμου) γιατί με κάποια ποσά (π.χ. το 1,101,101.10 του αξέχαστου Χόρν) δεν τα πήγαινε πολύ καλά, και το τελικό αποτέλεσμα είναι το εξής:

    System.Diagnostics.Debug.Print(Money.GetVerbal(1101101.10));
    ΕΝΑ ΕΚΑΤΟΜΜΥΡΙΟ ΕΚΑΤΟΝ ΜΙΑ ΧΙΛΙΑΔΕΣ ΕΚΑΤΟΝ ΕΝΑ ΕΥΡΩ ΚΑΙ ΔΕΚΑ ΛΕΠΤΑ

    System.Diagnostics.Debug.Print(Money.GetVerbal(1101101101100.11));
    ΕΝΑ ΤΡΙΣΕΚΑΤΟΜΜΥΡΙΟ ΕΚΑΤΟΝ ΕΝΑ ΔΙΣΕΚΑΤΟΜΜΥΡΙΑ ΕΚΑΤΟΝ ΕΝΑ ΕΚΑΤΟΜΜΥΡΙΑ ΕΚΑΤΟΝ ΜΙΑ ΧΙΛΙΑΔΕΣ ΕΚΑΤΟ ΕΥΡΩ ΚΑΙ ΕΝΤΕΚΑ ΛΕΠΤΑ

    System.Diagnostics.Debug.Print(Money.GetVerbal(0));
    ΜΗΔΕΝ ΕΥΡΩ

    System.Diagnostics.Debug.Print(Money.GetVerbal(-987654321.23, true, false)); //Να μην βγάλει ευρώ και λεπτά
    MEION ΕΝΝΙΑΚΟΣΙΑ ΟΓΔΟΝΤΑ ΕΠΤΑ ΕΚΑΤΟΜΜΥΡΙΑ ΕΞΑΚΟΣΙΕΣ ΠΕΝΗΝΤΑ ΤΕΣΣΕΡΙΣ ΧΙΛΙΑΔΕΣ ΤΡΙΑΚΟΣΙΑ ΕΙΚΟΣΙ ΕΝΑ ΚΑΙ ΕΙΚΟΣΙ ΤΡΙΑ

    public class Money
    {
        private static string[] mF  = { "", "ΜΙΑ ", "", "ΤΡΕΙΣ ", "ΤΕΣΣΕΡΙΣ " };
        private static string[] m   = { "", "ΕΝΑ ", "ΔΥΟ ", "ΤΡΙΑ ", "ΤΕΣΣΕΡΑ ", "ΠΕΝΤΕ ", "ΕΞΙ ", "ΕΠΤΑ ", "ΟΚΤΩ ", "ΕΝΝΕΑ " };
        private static string[] d1  = { "ΔΕΚΑ ", "ΕΝΤΕΚΑ ", "ΔΩΔΕΚΑ " };        //Διαφοροποίησεις των 11,12 ως προς τα 13, 14, 15, ...
        private static string[] d   = { "", "ΔΕΚΑ", "ΕΙΚΟΣΙ ", "ΤΡΙΑΝΤΑ ", "ΣΑΡΑΝΤΑ ", "ΠΕΝΗΝΤΑ ", "ΕΞΗΝΤΑ ", "ΕΒΔΟΜΗΝΤΑ ", "ΟΓΔΟΝΤΑ ", "ΕΝΕΝΗΝΤΑ " };
        private static string[] e   = { "", "ΕΚΑΤΟ", "ΔΙΑΚΟΣΙ", "ΤΡΙΑΚΟΣΙ", "ΤΕΤΡΑΚΟΣΙ", "ΠΕΝΤΑΚΟΣΙ", "ΕΞΑΚΟΣΙ", "ΕΠΤΑΚΟΣΙ", "ΟΚΤΑΚΟΣΙ", "ΕΝΝΙΑΚΟΣΙ" };
        private static string[] idx = { "ΛΕΠΤΑ", "ΕΥΡΩ ", "ΧΙΛΙΑΔΕΣ ", "ΕΚΑΤΟΜΜΥΡΙ", "ΔΙΣ", "ΤΡΙΣ", "ΤΕΤΡΑΚΙΣ ", "ΠΕΝΤΑΚΙΣ " };

        public static double Round(double value)
        {
            return Round(value, 0);
        }

        public static double Round(double value, short precision)
        {
            return (double)Math.Round((decimal)value, precision);
        }

        public static string GetVerbal(double money)
        {
            return GetVerbal(money, true);
        }

        public static string GetVerbal(double money, bool showZero)
        {
            return GetVerbal(money, showZero, true);
        }

        public static string GetVerbal(double money, bool showZero, bool showCurrency)
        {
            string tmpStr;
            string retStr;
            string str;
            short index = 0;
            bool isZero = true;
            bool isNegative = false;

            retStr = tmpStr = str = "";

            if (money < 0)
            {
                money = -money;
                isNegative = true;
            }

            if (money != (long)money)
            {
                short value = (short)Round(100 * money - 100 * Math.Floor(money), 0);
                if (value >= 100)
                {
                    value -= 100;
                    money += 1.0;
                }

                money = (long)money;
                if (value > 0)
                {
                    isZero = false;

                    tmpStr = GetValue(value, index, showCurrency);
                    if (money >= 1 && value > 0)
                    {
                        str += "ΚΑΙ ";
                    }
                    str += tmpStr;
                }
            }

            while (money >= 1)
            {
                isZero = false;
                money /= 1000;
                index += 1;
                short value = (short)(Round(money - (long)money, 3) * 1000);
                tmpStr = GetValue(value, index, showCurrency);
                money = (long)money;
                tmpStr += str;
                str = tmpStr;
            }

            if (isZero)
            {
                if (showZero)
                {
                    str = "ΜΗΔΕΝ ";
                    if (showCurrency)
                    {
                        str += idx[1];
                    }
                }
            }
            else
            {
                if (isNegative)
                    retStr = "MEION ";
            }

            retStr += str;
            return retStr;
        }

        static string GetValue(short money, short index, bool showCurrency)
        {
            if (index == 2 && money == 1)
            {
                return "ΧΙΛΙΑ ";
            }

            string str = "";
            int ekatontades = (int)(money / 100);
            int dekmon = money - ekatontades * 100;
            int dekades = (int)(dekmon / 10);
            int monades = dekmon - dekades *10;

            //EKATONTADES
            if (ekatontades == 1)
            {
                if (dekmon == 0)
                {
                    str = e[1] + " ";
                }
                else
                {
                    str = e[1] + "Ν ";
                }
            }
            else if (ekatontades > 1)
            {
                if (index == 2)
                {
                    str = e[ekatontades] + "ΕΣ ";
                }
                else
                {
                    str = e[ekatontades] + "Α ";
                }
            }

            //DEKADES
            switch (dekmon)
            {
                case 10:
                    str += d1[monades];    //"ΔΕΚΑ " με κενό στο τέλος
                    break;
                case 11:
                    str += d1[monades];
                    monades = 0;
                    break;
                case 12:
                    str += d1[monades];
                    monades = 0;
                    break;
                default:
                    str += d[dekades];
                    break;
            }

            //MONADES
            if (index == 2 && (monades == 1 || monades == 3 || monades == 4))
            {
                str += mF[monades];
            }
            else
            {
                if (dekmon < 10 || dekmon >12)
                {
                    str += m[monades];
                }
            }

            if (str.Length > 0 || index == 1)
            {
                if (index == 0 && money == 1/*monades == 1 && dekades == 0 && ekatontades == 0*/)
                {
                    if (showCurrency)
                    {
                        str += "ΛΕΠΤΟ";
                    }
                }
                else
                {
                    if (index > 1 || showCurrency)
                    {
                        str += idx[index];
                        if (index > 2)
                        {
                            if (index > 3)
                            {
                                str += idx[3];
                            }
                            if (money > 1)
                            {
                                str += "Α ";
                            }
                            else
                            {
                                str += "Ο ";
                            }
                        }
                    }
                }
            }
           
            return str;
        }
    }

  •  29-05-2008, 03:30 42477 σε απάντηση της 42476

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Νομίζω ότι ο κώδικας θέλει λίγη προσοχή παραπάνω. Καταρχήν, καλό είναι να χρησιμοποιείς τον τύπο decimal και όχι τον double όταν χειρίζεσαι χρηματικά ποσά, γιατί ο double είναι κινητής υποδιαστολής και μπορεί να χάσει δεκαδικά λόγω στρογγυλοποίησης.

    Επίσης, οι μεταβλητές καλό είναι να ορίζονται στο σημείο ακριβώς όπου χρησιμοποιούνται και όχι στην αρχή της μεθόδου. Έτσι αποφεύγεις μία μεταβλητή να έχει μεγαλύτερο scope από αυτό που χρειάζεται. Στην περίπτωση του κώδικα σου για παράδειγμα, η tmpStr έχει scope σε ολόκληρη την μέθοδο, αν και χρησιμοποιείται μόνο σε δύο ανεξάρτητα σημεία. Ουσιαστικά έχεις μία global tmpStr ενώ χρειάζεσαι μόνο δύο τοπικά temporary strings.
    Επίσης, κάνοντας string concatenation δημιουργείς συνέχεια temporary strings τα οποία μετά είναι άχρηστα και πρέπει να καθαριστούν από τον garbage collector. Καλύτερα θα ήταν να χρησιμοποιήσεις ένα StringBuilder και την String.Format() για να αποφύγεις τα temporary strings.
    Τέλος, μπορείς να αποφύγεις τις διαιρέσεις και το recursion μετατρέποντας το money σε string και παίροντας ένα-ένα τους αριθμούς.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-06-2008, 16:53 43012 σε απάντηση της 42476

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Πολύ καλή δουλειά και χρήσιμο. Μπράβο!
  •  25-06-2008, 10:34 43050 σε απάντηση της 42476

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Χαίρετε

    Διάβαζα τις πολύ όμορφες συναρτήσεις για την μετατροπή αριθμών σε Ευρώ και Λεπτά και θυμήθηκα ότι στο παρελθόν είχα φτιάξει κάτι αντίστοιχο. Ίσως να παραθέσω και τα δικά μου κιλά του κώδικα μιας και είχα μια εντελώς διαφορετική προσέγγιση στο θέμα. Όμως γράφω γιατί τότε και έως και σήμερα μου έχει μείνει μια αναπάντητη απορία.

    Πώς μεταφράζεται σε ολογράφως η πχ τιμή της βενζίνης 150.0314 που θα βλέπουμε στα βενζινάδικα σε κανα δυο μήνες;

    το ΕΚΑΤΟΝ ΠΕΝΗΝΤΑ ΕΥΡΩ ΚΑΙ ΜΗΔΕΝ ΤΡΙΑΚΟΣΙΑ ΔΕΚΑΤΕΣΣΕΡΑ ΛΕΠΤΑ είναι σωστή απάντη;

    το 150.314 πάντως αν γίνει ΕΚΑΤΟΝ ΠΕΝΗΝΤΑ ΕΥΡΩ ΚΑΙ ΤΡΙΑΚΟΣΙΑ ΔΕΚΑΤΕΣΣΕΡΑ ΛΕΠΤΑ είναι λάθος διότι 314 λεπτά είναι 3 Ευρώ και 14 Λεπτά.  Το πιο σωστό θα ήταν ΤΡΙΑΚΟΣΙΑ ΔΕΚΑ ΤΕΣΣΕΡΑ ΧΙΛΙΟΣΤΑ ΤΟΥ ΕΥΡΩ ή ΤΡΙΑΝΤΑ ΕΝΑ ΚΑΙ ΤΕΣΣΕΡΑ ΛΕΠΤΑ.

    Αν και φαντάζομαι ότι ένα τέτοιο σενάριο είναι επιστημονικής φαντασίας, ευτυχώς που οι λογιστές κυρίως στρογγυλοποιούν στα δύο δεκαδικά.

    Καμιά πρόταση;


    Stefanos Aslanis
  •  25-06-2008, 21:12 43077 σε απάντηση της 43050

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    saslanis:
    Αν και φαντάζομαι ότι ένα τέτοιο σενάριο είναι επιστημονικής φαντασίας, ευτυχώς που οι λογιστές κυρίως στρογγυλοποιούν στα δύο δεκαδικά.

    Καμιά πρόταση;

    Αν και το σενάριο είναι αληθινό, από τον καιρό που έχει καθιερωθεί το ευρώ, έχει επιβληθεί η στρογγυλοποίηση στα δύο δεκαδικά ψηφία - σε αυτό οι βασίζονται λογιστές και δρουν έτσι, είναι οδηγία από το υπουργείο εμπορείου.

    Οπότε το "χιλιοστά του ευρώ" και το "λεπτά του λεπτού ευρώ" δεν είναι αποδεκτά, τουλάχιστον νομικά...

    Γιατί να αγχωνόμαστε; Wink

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  26-06-2008, 20:09 43122 σε απάντηση της 43050

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Δεν υπάρχει υποδιαίρεση του ευρώ μικρότερη του λεπτού.

    http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:51996PC0499(01):EL:HTML

    http://www.moi.gov.cy/moi/pio/pio.nsf/All/0BF8BFA414168E4DC22573B1004C5753?Opendocument

    Σε κάποια άλλη σελίδα (http://www.gge.gr/09diadsystasis/Documents/Entypa/N_2842.doc) αναφερόταν ότι ακρίβεια μεγαλύτερη των δύο δεκαδικών μπορεί να χρησιμοποιηθεί για ενδιάμεσους υπολογισμούς. Το τελικό ποσό σε ευρώ εκφράζεται πάντα με στρογγυλοποίηση στα 2 δεκαδικά.

  •  27-06-2008, 08:48 43128 σε απάντηση της 43122

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Αφού δε μπορείς να δώσεις ρέστα μικρότερα του ενός λεπτού του ευρώ τη περισσότερη ακρίβεια τη χρειάζεσαι για εσωτερικές πράξεις και για ειδικές περιπτώσεις τιμοκαταλόγων. (Κινητή τηλεφωνία, internet χρεώσεις, βενζίνη κτλ…)
    while (!dead) learn();
  •  15-08-2008, 11:50 44129 σε απάντηση της 42477

    Απ: Function ΟΛΟΓΡΑΦΩΣ

    Προσωπικά πιστεύω πως μια πολύ καλή λύση είναι να χρησιμοποιείς fixed point αριθμούς των 64bit με το ακέραιο κομμάτι στα 48bit και το δεκαδικό στα 16bit όταν ασχολείσαι με χρηματικά ποσά (όπου μπορείς να φτιάξεις μια "Currency" κλάση με overloaded operators μάλλον θα βολεύει).


    ~bs~
Σελίδα 1 από 2 (17 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems