JSR 354 - Money and Currency API for Java

Uploaded on

Presentation of the Java Standard API for handling Currencies, monetary values, arithmetic, and foreign exchange

Presentation of the Java Standard API for handling Currencies, monetary values, arithmetic, and foreign exchange

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads


Total Views
On Slideshare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. JSR 354Java Money and Currency API Werner Keil Build Manager, DevOps Expert, Agile Coach Maersk Line EG Member, JSR 354 @wernerkeil
  • 2. Werner Keil - Bio • Consultant – Coach • Creative Cosmopolitan • Open Source Evangelist • Software Architect • Java Godfather • JCP Executive Committee Member • Eclipse UOMo Project Lead • DevOps Guy 2
  • 3. Show me the Money!
  • 4. Agenda • History • Motivation • The JSR • Virtual Currencies • Currency Exchange • Demos • Q&A 4
  • 5. History 5
  • 6. Earlier Approaches Martin Fowler: A large proportion of the computers in this world manipulate money, so its always puzzled me that money isnt actually a first class data type in any mainstream programming language.The lack of a type causes problems, the most obvious surrounding currencies… see http://martinfowler.com/eaaCatalog/money.html 6
  • 7. Earlier Approaches (2) Eric Evans – Time and Money: On project after project, software developers have to reinvent the wheel, creating objects for simple recurring concepts such as "money" and "currency". Although most languages have a "date" or "time" object, these are rudimentary, and do not cover many needs, such as recurring sequences of time, durations of time, or intervals of time. … see http://timeandmoney.sourceforge.net/ To be quite frank, their code isn‘t more than an academic POC, factories called dollars() or euros() are useless in real globally deployed frameworks, but he made a good point. 7
  • 8. MoneyDance 8
  • 9. Motivation
  • 10. Summary • This JSR will provide a money and currency API for Java, targeted at all users of currencies and monetary amounts in Java. • The API will provide support for standard ISO-4217 and Custom (e.g. Virtual) currencies, as well as representation of a monetary amount. • It willsupport currency arithmetic, even across different currencies, and foreign currency exchange. • Additionally, implementation details surrounding serialization and thread safety are to be considered 10
  • 11. Why is it needed? • Monetary values are a key feature to many applications. • The existing java.util.Currency class is strictly a structure usedfor representing ISO-4217 standard currencies. • No standard value type to represent a monetary amount. • No support for currency arithmetic or conversion 11
  • 12. Challenges • Keep it simple – Remember the most common use case •Adding currency values e.g. in an e-commerce app. • Performance •How to support low latency applications, such as High Frequency Trading apps. • Precision •There can potentially be differing precisions specified for arithmetic, currency exchange and formatting 12
  • 13. Challenges (2) • Formatting •Requirement should be to use existing Number Formats. •However there is no existing format representing for example Indian Rupees: which might look something like this: 12,34,00,000 •Natural language support for non-decimal valuations for example • Lakhs • Crores • 1 Lakh = 100,000 • 1 Crore = 100 Lakh 13
  • 14. Challenges (3) • Formatting •12,34,56,000.21 is written 12 Crore, 34 Lakh, 56 Thousand Rupees and 21 Paise • Support for non-standard rounding modes 14
  • 15. Non-standard Rounding Modes • It is a big world, and each country has its regulations and cultural nuances for expressing currencies in natural language, rounding policies, groupings, etc. • For example, in Argentina rounding is prescribed for the third digit after the decimal point: If the third digit is 2 or less, change it to 0 or drop it. If the third digit is between 3 and 7, change it to 5. If the third digit is 8 or more, add one to the second digit and drop the third digit or change it to 0. 15
  • 16. Non-standard Rounding – Argentina Argentina Rounding Examples Original Number Rounded Notes 123.452 123.45 Third digit<3 round down 123.456 123.455 3<=third digit<=7 change to 5 123.459 123.46 Third digit>=8 round up Switzerland uses a similar rounding strategy. 16
  • 17. Risks Plan – “Money and Currency” is a formidable and dynamic category with regional dependencies, requiring programmers, business users, international accountants, and attorneys. Risk – Incomplete or outdated spec Mitigation – Resulting API should be flexible, let application developer change implementation as needed. 17
  • 18. Risks (2) Plan – There is also a Java dependency on JDK NumberFormat. Risk – NumberFormat may require coordinated modifications. Mitigation – Coordinate with JDK release; Supply NumberFormats and similar classes that augment JDK content. Plan – There is also a Java dependency on JDK NumberFormat. Risk – NumberFormat may require coordinated modifications. Mitigation – Coordinate with JDK release; Supply NumberFormats and similar classes that augment JDK content. 18
  • 19. The JSR
  • 20. Expert Group Members • Credit Suisse • Goldman Sachs • Stephen Colebourne • Ben Evans • Werner Keil • Bob Lee 20
  • 21. Supporting the JSR • Credit Suisse • Caxton Associates • Goldman Sachs • JP Morgan/Chase • London Java Community • Stephen Colebourne • Werner Keil 21
  • 22. Schedule • Targeted to Java 9 • Aiming at Java ME/Embedded 8 or 9 • Following the EC Merge and Standard/Embedded harmonization, no JSR should be SE/EE or ME only, with very few, specialized exceptions. Money is so important, and has almost no legacy in the JDK except java.util.Currency, that it should be supported by ALL POSSIBLE platforms, except maybe JavaCard for now. • With back-port to previous versions still supported and in relevant use 22
  • 23. Virtual Currencies 23
  • 24. Facebook Credits What are Facebook Credits? • Facebook Credits are a virtual currency you can use to buy virtual goods in any games or apps of the Facebook platform that accept payments. You can purchase Facebook Credits directly from within an app using your credit card, PayPal, mobile phone and many other local payment methods. ► Hence any such purchase is practically a conversion, similar to if you buy a foreign currency when travelling abroad☺ 24
  • 25. Top 10 Video Game Currencies 1. Gold 2. Gil 3. Rupees (not Indian;-) 4. Credits 5. Gold Rings 6. Hearts 7. Zenny 8. Potch 9. Munny 10.Nuyen 25
  • 26. World Currencies 26
  • 27. Currency Exchange
  • 28. Currency Conversion (JScience) 28
  • 29. Online Currency Conversion Example 29
  • 30. Trading Application Example What happens, if we use built in java.util.Currency and Standard JSP formats 30
  • 31. Demos
  • 32. Q&A
  • 33. Links • The JSR: http://jcp.org/en/jsr/summary? id=354 • java.net Project: http://java.net/projects/javamoney/ • GitHub Project: http://github.com/JavaMoney/
  • 34. Links (2) • Eclipse UOMo: http://www.eclipse.org/uomo/ • JScience: http://www.jscience.org • JodaMoney: http://joda-money.sourceforge.net/