Unit conversion

Hi,

I am new to Julia and am trying out Unitful. I would like to do the following:

a = 1"m" / 1"cm"

and have it return 100.

What must I do to make this happen? It is clearly not automatic. Similarly, I would like:

b = 1"in"

to return 0.003937 * u"m"

In other words, I would like an automatic convert to SI units.

Thanks,

Gordon

Try `upreferred()` IIRC

1 Like

I think automatic conversion is not recommended and so the Unitful devs opted for not doing it. For SI units conversion, I think `upreferred` generally does the trick:

``````julia> a = 1u"m" / 1u"cm"
1.0 m cm^-1

julia> upreferred(a)
100.0

julia> b = 1.0u"inch"
1.0 inch

julia> upreferred(b)
0.0254 m
``````

But I think being explicit with your conversion is probably a better idea, and the pipe operator offers nice syntax for this IMHO:

``````julia> a |> unit(1) # maybe there is a better unitless unit
100.0

julia> b |> u"m"
0.0254 m
``````
4 Likes
``````julia> uconvert(NoUnits,1u"m"/1u"cm")
100.0
julia> uconvert(u"m",1.0u"inch")
0.0254 m
``````
4 Likes

Thank you very much for your replies. Yes, I concluded the same, but was wondering whether I had missed some capability. I appreciate the quick response!

This also works:

``````julia> 1u"m"/1u"cm" |> u"m/m"
100.0
``````

which feels like an assertion that itâ€™s a ratio of lengths, but itâ€™s actually only asserting that it is unitless. Note that this works as well:

``````julia> 1u"m"/1u"cm" |> u"V/V"
100.0
``````

Thanks. Is there a method to convert any unit into SI units? So far, all I seen is how to convert from one unit to another, but I have to specify the target units.

â€¦ `upreferred`? Is there any case where it doesnâ€™t convert to SI?

I think the problem is that saying â€śconvert to SIâ€ť isnâ€™t specific enough. Do you want Newtons? Or kg*m/s^2? I think thatâ€™s why you have to specify.

Excellent point. Thanks.

By the way, there is SI units with lengths in meters, and SI units with lengths in millimeters. Both are in common use.

Thanks. I really thought meters was some kind of default. I come from the Brian environment in Python, and I just got used to it.

Gordon

Itâ€™s easy to convert to base SI units without ambiguity. The base units are m, s, kg, K, A, mol, cd. The odd one out is kg, the others are without prefix.

Normalizing should be straightforward.