Вот возможное обобщение моей первоначальной функции.
(Я определил, что это не эквивалентно решению г-на Волшебника, но я пока не уверен, какой вариант мне лучше.)
re = RegularExpression;
(* Show Number. Convert to string w/ no trailing dot. Use at most d significant
figures after the decimal point. Target t significant figures total (clipped
to be at least i and at most i+d, where i is the number of digits in integer
part of x). *)
shn[x_, d_:5, t_:16] := ToString[x]
shn[x_?NumericQ, d_:5, t_:16] := With[{i= IntegerLength@IntegerPart@x},
StringReplace[ToString@NumberForm[N@x, Clip[t, {i,i+d}],
ExponentFunction->(Null&)],
re@"\\.$"->""]]
Тестирование:
Здесь мы указываем 4 значащие цифры, но никогда не опускаем их слева от десятичной запятой и никогда не используем более 2 значащих цифр справа от десятичной запятой.
(# -> shn[#, 2, 4])& /@
{123456, 1234.4567, 123.456, 12.345, 1.234, 1.0001, 0.123, .0001234}
{ 123456 -> "123456",
1234.456 -> "1234",
123.456 -> "123.5"
12.345 -> "12.35",
1.234 -> "1.23",
1.0001 -> "1",
0.123 -> "0.12",
0.0001234 -> "0.00012" }