省略小数点前的零并在 siunitx/pgfmath 中转换科学计数法

省略小数点前的零并在 siunitx/pgfmath 中转换科学计数法

我正在尝试以一种不会将 .8 转换为 0.8 的方式自动格式化数字,同时将科学计数法转换为无指数计数法。siunitx似乎可以同时完成这两项操作,但我无法让它们一起工作。

\documentclass{article}
\usepackage{siunitx}
\newcommand{\myround}[1]{\num[zero-decimal-to-integer,scientific-notation=fixed,fixed-exponent=0,round-mode=places,round-precision=2,add-integer-zero=false]{#1}}
%\newcommand{\myround}[1]{\num[zero-decimal-to-integer,round-mode=places,round-precision=2,add-integer-zero=false]{#1}}
\pagestyle{empty}
\begin{document}
\myround{.8}
\myround{1}
\myround{4.00000000001}
\myround{-.1151}
\myround{4.44089209850063E-16}

.80
1
4
-.12
0
\end{document}

\newcommand在我看来,这是 MWE 中的第一个应该产生正确的结果,因为它得到了所有正确的选项。但是,小数点前的零又被加回来了:

零仍然存在

使用第二个宏定义(已被注释掉)得到这个结果,证明原则上它应该可以工作,但当然科学计数法没有转换,也没有正确四舍五入(四舍五入到小数点后两位,4.44×10 -16应该是 0.00×10 0)。

科学记数法仍然存在

我还添加了pgfmath标签,因为\pgfmathprintnumber它似乎有许多与\numfrom相同的选项siunitx,而且我不知道一个是否在内部使用另一个,如果它能满足我的需要,我也不介意使用另一个。

答案1

\pgfmathprintnumberskip 0.如果您指定和 则可以做到这一点fixed

\documentclass{article}
\usepackage{tikz}
\newcommand{\myround}[1]{\pgfmathprintnumber[skip 0.,fixed]{#1}}
\pagestyle{empty}
\begin{document}
\myround{.8}
\myround{1}
\myround{4.00000000001}
\myround{-.1151}
\myround{4.44089209850063E-16}

.80
1
4
-.12
0
\end{document}

相关内容