我正在尝试以一种不会将 .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
它似乎有许多与\num
from相同的选项siunitx
,而且我不知道一个是否在内部使用另一个,如果它能满足我的需要,我也不介意使用另一个。
答案1
\pgfmathprintnumber
skip 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}