# HG changeset patch # User Daniel O'Connor # Date 1727421642 -34200 # Node ID 47da95b31dcb955eab4b098c79feeb91c33d997c # Parent 23c96322cfb6e9a329a4b72e9568a269300f626f Move sifmt function to where it can be reused. diff -r 23c96322cfb6 -r 47da95b31dcb misc.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc.py Fri Sep 27 16:50:42 2024 +0930 @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +# Copyright (c) 2024 +# Daniel O'Connor . All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +def sifmt(_v, dp = 3, unit = 'Hz', sp = ' '): + '''Format a number using SI prefixes''' + si_prefixes = ('T', 'G', 'M', 'k', '', 'm', 'ยต', 'n', 'p') + scale = 10 ** 12 + v = abs(_v) + if v == 0: + sip = "" + scale = 0 + for i, sip in enumerate(si_prefixes): + if v >= scale: + break + scale /= 1e3 + return ('%.' + str(dp) + 'f%s%s%s') % (_v / scale, sp, si_prefixes[i], unit)