-----Original Message-----
From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org]
On Behalf Of Steven Watanabe
Sent: Friday, March 12, 2010 7:23 PM
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] boost.units converting double tp SI prefix
AMDG
Olaf Peter wrote:
is there a way to use boost.units to convert a double automatically to a
SI unit prefix, e.g. 10e-3 to 10m or 10e3 to 10k ?? The value isn't know
at compile time, so the decision has to be done on runtime.
There is not such a facility. There will soon be support for
printing things like 1.0 km instead of 1000 m, but formatting
of raw numbers is somewhat beyond the scope of the library.
But I think that you can create your own unit (and quantity) easily,
and then you *can* use the very useful auto prefixing system Steven has devised.
For example for show this, I've created a entirely useless 'thing' type - dimensionless of course.
It could be widget count, (or indeed a unit of currency) with a name and symbol.
struct thing_base_unit : boost::units::base_unit
{
static const char* name() { return("thing"); }
static const char* symbol() { return(""); }
};
and this constructs a quantity of it (2048.0 - a double by default)
quantity t = 2048. * thing_base_unit::unit_type();
and you can then chose to output with a trailing name of your choice
cout << name_format << engineering_prefix << t << endl; // 2.048 kilothing
and similarly with a symbol (I've defined my symbol to be a "", so I just get the SI prefix.
cout << symbol_format << engineering_prefix << t << endl; // 2.048 k
Steven has even more cunningly allowed the binary 2^10, 2^20, 2^30 ... prefixes,
cout << binary_prefix << t << endl; // "2 Ki"
For currency, the multiple (k, M, G) *must precede* the name or symbol of the unit.
(*not* Symbol first as one might really want for $, £ € ...)
quantity ce = 2048. * euro_base_unit::unit_type();
cout << name_format << engineering_prefix << ce << endl; // 2.048 kiloEUR
cout << symbol_format << engineering_prefix << ce << endl; // 2.048 k€
Perhaps this will meet your needs when available?
Paul
---
Paul A. Bristow
Prizet Farmhouse
Kendal, UK LA8 8AB
+44 1539 561830, mobile +44 7714330204
pbristow@hetp.u-net.com