Comments (2)
Hi,
- 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.
- 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.
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)
- Problem with overflow detection with CLANG compiler.. HOT 1
- incorrect constructing from fp HOT 5
- How does it stand against Muller's recursion ? HOT 2
- specify decimal separator HOT 2
- Make it fully trivial HOT 3
- Suggest using constexpr HOT 1
- Is it compatible with IEEE 754-2008? HOT 2
- Modulo operator HOT 2
- is there a way to perform assigment from std::string? HOT 1
- how to get an int/double from dec type ? HOT 3
- signal SIGSEGV, Segmentation fault on return HOT 2
- Still C++11 stuff when DEC_NO_CPP11 is defined HOT 1
- format_from_stream truncates its return value from decimal_format to basic_decimal_format HOT 3
- Enhancement: More friendly constructor HOT 1
- support for power and root ? HOT 1
- Edge cases failing HOT 1
- how to initialize in struct declaration HOT 4
- Need support to wstring HOT 1
- macos build is failing HOT 1
- unable to change precision of existing variable HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from decimal_for_cpp.