diff --git a/src/expr/calc/casting.cc b/src/expr/calc/casting.cc index 63f3cbd..2d38eb1 100644 --- a/src/expr/calc/casting.cc +++ b/src/expr/calc/casting.cc @@ -95,7 +95,7 @@ double Cast(String v) { template <> double Cast(DecimalP v) { - return v.toDouble(); + return Cast(String(v->toString())); } template <> diff --git a/test/expr/calc/test_casting.cc b/test/expr/calc/test_casting.cc index 5e494a2..1344060 100644 --- a/test/expr/calc/test_casting.cc +++ b/test/expr/calc/test_casting.cc @@ -45,6 +45,7 @@ TEST(TestStringTonumber, Cast) { ASSERT_EQ((calc::Cast(String("bb"))), 0); ASSERT_EQ((calc::Cast(String("ccc"))), 0); ASSERT_EQ((calc::Cast(String("ddd"))), 0.0); + ASSERT_EQ((calc::Cast(DecimalP(std::string("123.45")))), 123.45); } TEST(TestToInt32, Cast) { @@ -68,9 +69,9 @@ TEST(TestOtherToDecimalP, Cast) { //float and double should not be compared by operator =. ASSERT_EQ((calc::Cast(DecimalP(std::string("123456.123456789")))), 123456.125); - ASSERT_EQ((calc::Cast(DecimalP(std::string("123456.123456789")))), 123456.12345678899); + ASSERT_EQ((calc::Cast(DecimalP(std::string("123456.123456789")))), 123456.12345678901); ASSERT_EQ((calc::Cast(DecimalP(std::string("-123456.123456789")))), -123456.125); - ASSERT_EQ((calc::Cast(DecimalP(std::string("-123456.123456789")))), -123456.12345678899); + ASSERT_EQ((calc::Cast(DecimalP(std::string("-123456.123456789")))), -123456.12345678901); ASSERT_EQ((calc::Cast(DecimalP(std::string("0")))), 0); ASSERT_EQ((calc::Cast(DecimalP(std::string("0")))), 0);