matrixdiv[x_, y_] := x . Inverse[y]

pretty[x_] := (
  t1 := x[[1, 1]];
  t2 := unitname[(x/t1)];
  If[Re[t1] == 0, t1b := Im[t1], t1b := Re[t1]];
  t3 := Floor[Log10[t1b]/3.0];
  t4 := prefixName[t3];
  t5 := t1/10^(3 t3);
  t6 := EngineeringForm[N[t5], 3];
  Row[{t5, " ", t4, t2, "  ≈  ", t6, " ", t4, t2}]
  )

$PrePrint = If[MatrixQ[#], pretty[#], #] &;

unitSI[x_] := (
  t2 := x[[1, 1]] ;
  t3 := x/t2 ;
  t1 := MatrixLog[t3] ;
  Row[{"kg^", t1[[2, 2]], " * m^", t1[[3, 3]], " * s^", t1[[4, 4]], " * A^", t1[[5, 5]]}]
  )

kg                            := MatrixExp[DiagonalMatrix[{0, 1, 0, 0, 0}]]

unitname[kg]                  := "kg"

meter                         := MatrixExp[DiagonalMatrix[{0, 0, 1, 0, 0}]]

unitname[meter]               := "m"

second                        := MatrixExp[DiagonalMatrix[{0, 0, 0, 1, 0}]]

unitname[second]              := "s"

ampere                        := MatrixExp[DiagonalMatrix[{0, 0, 0, 0, 1}]]

unitname[ampere]              := "A"

coulomb                       := ampere . second

unitname[coulomb]             := "C"

meterpersecond                := matrixdiv[meter, second]

unitname[meterpersecond]      := "m/s"

meterpersecondquare           := matrixdiv[meterpersecond, second]

unitname[meterpersecondquare] := "m/s^2"

kgmeterpersecond              := kg . meterpersecond

unitname[kgmeterpersecond]    := "kg m/s"

newton                        := kg . meterpersecondquare

unitname[newton]              := "N"

joule                         := newton . meter

unitname[joule]               := "J"

watt                          := matrixdiv[joule, second]

unitname[watt]                := "W"

volt                          := matrixdiv[watt, ampere]

unitname[volt]                := "V"

hertz                         := Inverse[second]

unitname[hertz]               := "Hz"

ohm                           := matrixdiv[volt, ampere]

unitname[ohm]                 := "Ω"

farad                         := matrixdiv[s, ohm]

unitname[farad]               := "F"

henry                         := second . ohm

unitname[henry]               := "H"

tera	                      := 1*^12

giga	                      := 1*^9
                    
mega	                      := 1*^6
                    
kilo	                      := 1*^3
                    
milli	                      := 1*^-3
                    
micro	                      := 1*^-6
                    
nano	                      := 1*^-9
                    
pico	                      := 1*^-12
                    
prefixName[4]                 := "T"

prefixName[3]                 := "G"

prefixName[2]                 := "M"

prefixName[1]                 := "k"

prefixName[0]                 := ""

prefixName[-1]                := "m"

prefixName[-2]                := "µ"

prefixName[-3]                := "n"

prefixName[-4]                := "p"