Skip to content

Commit 9f38f58

Browse files
authored
Merge pull request #178 from JuliaDynamics/hw/fixshow
2 parents 005287b + 2fc1b4b commit 9f38f58

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/show.jl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ function stylesymbolarray(syms, defaults, guesses, symstyles=Dict{Int,Symbol}())
9696
style = get(symstyles, i, :default)
9797
ret = ret * styled"{$style:$(string(sym))}"
9898
if !isnothing(default)
99-
_str = str_significant(default; sigdigits=2)
99+
_str = str_significant(default; sigdigits=5)
100100
ret = ret * styled"{NetworkDynamics_defaultval:=$(_str)}"
101101
elseif !isnothing(guess)
102-
_str = str_significant(guess; sigdigits=2)
102+
_str = str_significant(guess; sigdigits=5)
103103
ret = ret * styled"{NetworkDynamics_guessval:≈$(_str)}"
104104
end
105105
if i < length(syms)
@@ -306,14 +306,12 @@ function maybe_plural(num, word, substitution=s"\1s")
306306
end
307307

308308
function str_significant(x; sigdigits)
309-
(x == 0) && (return "0")
310-
x = round(x; sigdigits)
311-
n = length(@sprintf("%d", abs(x))) # length of the integer part
312-
if (x -1 || x 1)
313-
decimals = max(sigdigits - n, 0) # 'sig - n' decimals needed
314-
else
315-
Nzeros = ceil(Int, -log10(abs(x))) - 1 # No. zeros after decimal point before first number
316-
decimals = sigdigits + Nzeros
309+
# isinteger(x) && return string(Int(x))
310+
formatted = @sprintf("%.*g", sigdigits, x)
311+
if occursin(r"e\+0*", formatted)
312+
formatted = replace(formatted, r"e\+0*" => "e")
313+
elseif occursin(r"e\-0+", formatted)
314+
formatted = replace(formatted, r"e\-0+" => "e-")
317315
end
318-
return @sprintf("%.*f", decimals, x)
316+
formatted
319317
end

test/utils_test.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,15 @@ using NetworkDynamics
101101
r3 = 12:13
102102
@test_throws AssertionError flatrange((src=r1,dst=r3))
103103
end
104+
105+
@testset "significant digits print" begin
106+
using NetworkDynamics: str_significant
107+
@test str_significant(0.0; sigdigits=3) == "0"
108+
@test str_significant(1.23456789; sigdigits=3) == "1.23"
109+
@test str_significant(9.81; sigdigits=3) == "9.81"
110+
@test str_significant(9.81; sigdigits=2) == "9.8"
111+
@test str_significant(1002.1; sigdigits=3) == "1e3"
112+
@test str_significant(0.00000122; sigdigits=3) == "1.22e-6"
113+
@test str_significant(-123.294191; sigdigits=5) == "-123.29"
114+
end
104115
end

0 commit comments

Comments
 (0)