Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-2878

BigDecimalConverter improvement

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.4.8
    • 1.4.10, 1.5-M1
    • wicket
    • None

    Description

      I was having problems comparing values returned by the user input into some form fields of type BigDecimal. Looking for the problem, I notes that the BigDecimalConverter was passing double values as parameter to BigDecimal constructor. According with its doc:

      "he results of this constructor can be somewhat unpredictable. One might assume that writing new BigDecimal(0.1) in Java creates a BigDecimal which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625. This is because 0.1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the value that is being passed in to the constructor is not exactly equal to 0.1, appearances notwithstanding. "

      "The String constructor, on the other hand, is perfectly predictable: writing new BigDecimal("0.1") creates a BigDecimal which is exactly equal to 0.1, as one would expect. Therefore, it is generally recommended that the String constructor be used in preference to this one. "

      Can BigDecimalConverter use the valueOf method of the BigDecimal API or String constructor to create those objects from double values? IMO giving preference to those options we are improving the converter, since the value will to be predictable

      Attachments

        Activity

          People

            jdonnerstag Juegen Donnerstag
            pedrosans Pedro Santos
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: