1

如果我只想将一个值从一个单位转换为另一个单位,那么最简单(理想情况下是单行)的方法是什么?

例如,我想以米为单位存储一个值,但以英里为单位指定它。

执行此操作的大多数示例似乎很长,涉及 typedef 和单元定义,并且没有给出简单的无单元输出。

4

2 回答 2

5

嗯 - 我使用以下。

#include <boost/units/quantity.hpp>
#include <boost/units/systems/si/length.hpp>
#include <boost/units/base_units/imperial/mile.hpp>

using namespace boost::units;

quantity<si::length> distance_in_metres = static_cast<quantity<si::length> >(
    100.0 * boost::units::imperial::mile_base_unit::unit_type()
);

仅供参考 - 我在 CPPcon 2015 上做了一个关于 Boost Units 的教程演示 - 你可以在https://www.youtube.com/watch?v=qphj8ZuZlPA找到它

于 2015-09-19T21:53:04.053 回答
3

有两种方法可以快速轻松地做到这一点。

假设您要将 100 英里转换为米...

第一个显式构造一个数量:

#include <boost/units/quantity.hpp>
#include <boost/units/systems/si/length.hpp>
#include <boost/units/base_units/imperial/mile.hpp>
double distance_in_metres = boost::units::quantity<boost::units::si::length>(
    100.0 * boost::units::imperial::mile_base_unit::unit_type()
  ) / boost::units::si::meter;

第二个创建一个转换因子并乘以:

#include <boost/units/systems/si/length.hpp>
#include <boost/units/base_units/imperial/mile.hpp>
double distance_in_metres = 100.0 *
  boost::units::conversion_factor(
    boost::units::imperial::mile_base_unit::unit_type(),
    boost::units::si::meter
  );
于 2013-11-25T09:52:45.550 回答