1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
|
# File 'lib/gstring.rb', line 1494
def to_eng(pa=6, unit=nil)
pa = pa.to_i
pa = (pa<1) ? 1 : (pa>15) ? 15 : pa
if self < 0.0
num = -self
sgn = "-"
else
num = self
sgn = ""
end
str = "%.16e" % num
str.(1..1)
num = str.parse('e')
exp = str.to_i
pos = (exp%3)+1
if (exp < 0)
esgn = "-"
ee = -(exp/3)*3
else
esgn = ""
ee = (exp/3)*3
end
pd = pos > pa ? pos : pa
num = (num[0..pa].to_f/10).round.to_s[0..(pa-1)].padto(pd,'0',:right)
num.insert(pos, '.') unless pos >= (num.length)
pfx = String::SI_UNIT_PREFIXES["#{esgn}#{ee}".to_i]
unless unit.nil?
unless pfx.nil?
num += pfx
ee=0
end
end
unit ||= ""
if (ee>0)
num += "e#{esgn}#{ee}"
end
return sgn+num+unit
end
|