val = 100000000 * u.s

print(val.to(units.yr) ) # Year, non-SI

print(val.to(units.yr).si) # Returns seconds!

I’m sure there’s something obvious I’m missing here…

val = 100000000 * u.s

print(val.to(units.yr) ) # Year, non-SI

print(val.to(units.yr).si) # Returns seconds!

I’m sure there’s something obvious I’m missing here…

As far as I know, there is no such thing as an “SI year”. A year is a non-SI unit, and – unlike the non-SI time units of minute, hour, or day – it’s not even one of the non-SI units that are officially accepted for use with SI (see Non-SI units mentioned in the SI - Wikipedia, or Section 4 of the SI Brochure). Can you elaborate on what you expected that call to return?

1 Like

So my understanding of ‘SI’ (Scientific Notation?) is that you get a number like this:

3 * 10^6 seconds.

And if I do

val.to(units.yr).si

I get something like that in seconds:

x * 10^y *seconds*

But what I want to display is the number of years in the same format:

x * 10^y *years*

So it’s easy to convert to years, but I seem to get the implicit conversion back to seconds.

It seems that:

print(“{:e}”.format(val.to(units.yr)))

gives me what I was after.

1 Like

SI = *Système international*, this describes the set of units (see link above); it has nothing to do with the formatting of the numbers.

Yeah, I thought it meant ‘scientific notation’, hence the confusion!