Casting boost::units::quantity to double

橙三吉。 提交于 2019-12-10 13:25:05

问题


I need to pass the value of a quantity to a library for evaluation. The boost units library takes double values in SI, so the boost units library is very appealing in ensuring that requirement. However, how should I cast the quantity to a double value? The documentation and example seems to avoid this since the intent is to, rightfully so, maintain the units.

Something like:

quantity<pressure> p(101.1 * kilo * pascals);
double dblP = static_cast<double>(p);  // double value in Pascals 

Going through the headers suggests... Is that the correct way to cast to the base type?

p.value();

回答1:


The reference documentation shows that either implicit casts or the value() member method can be used.

  1. operator value_type() const;

    implicit conversion to value_type is allowed

  2. const value_type & value() const;

    constant accessor to value




回答2:


I think what you're looking for is this:

quantity<pressure> p(101.1 * kilo * pascals);
double dblP = p / pascals;  // double value in Pascals 

If you divide out the unit, you are left with a quantity<dimensionless> which will implicitly convert to a double. This eliminates any question of what the internal representation (which value() returns) units are.




回答3:


Just spotted this. I think the intended method is to use Boost's quantity_cast operator.

quantity<pressure> p(101.1 * kilo * pascals);
double dblP = quantity_cast<double>(p);

http://www.boost.org/doc/libs/1_55_0/doc/html/boost_units/Quantities.html#boost_units.Quantities.Quantity_Construction_and_Conversion



来源:https://stackoverflow.com/questions/13937004/casting-boostunitsquantity-to-double

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!