diff --git a/include/real/exact_number.hpp b/include/real/exact_number.hpp index 5080259..34d0556 100644 --- a/include/real/exact_number.hpp +++ b/include/real/exact_number.hpp @@ -760,7 +760,10 @@ namespace boost { exponent += integer_rhs_zeros; } - integer_part = number.substr(has_sign + integer_lhs_zeros, integer_count); + if (integer_count != 0) + integer_part = number.substr(has_sign + integer_lhs_zeros, integer_count + integer_rhs_zeros); + else + integer_part = number.substr(has_sign + integer_lhs_zeros, integer_count); decimal_part = number.substr(decimal_start_index, decimal_count); return {integer_part, decimal_part, exponent, positive}; diff --git a/test/real_number_from_string_test.cpp b/test/real_number_from_string_test.cpp new file mode 100644 index 0000000..de5b287 --- /dev/null +++ b/test/real_number_from_string_test.cpp @@ -0,0 +1,22 @@ +#include +#include +#include + +TEST_CASE("number_from_string") { + + SECTION("a == b") { + boost::real::real a ("100.1e1"); + boost::real::real b ("1001"); + CHECK( a == b ); + } + SECTION("a == b") { + boost::real::real a ("154000.32e2"); + boost::real::real b ("15400032"); + CHECK( a == b ); + } + SECTION("a == b") { + boost::real::real a ("123000.123e3"); + boost::real::real b ("123000123"); + CHECK( a == b ); + } +} \ No newline at end of file