Code Monkey home page Code Monkey logo

Comments (2)

vpiotr avatar vpiotr commented on May 31, 2024

Hi,

  1. pack(123, 456), prec<2> is wrong. See documentation-in-comment for pack() function and "after" value description:
/// Combines two parts (before and after decimal point) into decimal value
/// \param[in] before value before decimal point
/// \param[in] after value after decimal point multiplied by 10^prec
/// \result Returns *this

In that case:

  • calculated result of pack(123, 456) will be 123,56
  • value 456 is not "after value" multiplied by 100

This function does not handle rounding - and it cannot do it.
It assumes you follow function requirements.

See example:

decimal<4> d;
/* 1 */ BOOST_CHECK(d.pack(1,1) == decimal<4>("1.0001")); // OK
/* 2 */ BOOST_CHECK(d.pack(1,/*000*/1) == decimal<4>("1.0001")); // OK
/* 3 */ BOOST_CHECK(d.pack(1,/*0000*/1) == decimal<4>("1.0001")); // OK, but if you meant "1.00001" or "1.01" - in that case it's an error

Also it's wrong to add any handling for "after" numbers > 10^prec, because it will work only for values with first digit > 0, for other numbers such a test will not work and error will go undetected.

I'll add clarification comment - "after" value cannot be higher or equal to 10^prec.

  1. second case, pack(-12, 34), is not correct according to included unit tests, see:
  BOOST_CHECK(d.pack(-1,-5121) == decimal<4>(-1.5121));
  BOOST_CHECK(d.pack(-1,5121) != decimal<4>(-1.5121));
  BOOST_CHECK(d.pack(1,-5121) != decimal<4>(-1.5121));

You need to provide both numbers negative - I'll document this requirement in comment too.

from decimal_for_cpp.

vpiotr avatar vpiotr commented on May 31, 2024

For (1) see pack_rounded - where you specify input precision.
I managed also to correct "fromString" which from now performs rounding when precision of input value is higher then output precision.

from decimal_for_cpp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.