使用 lua 将科学计数法转换为十进制计数法

使用 lua 将科学计数法转换为十进制计数法

下一个代码给出 5e-05\luaveclen{0.00003}{0.00004}但是我需要一个小数如何获得十进制表示法?

\def\luaveclen#1#2{
    \directlua{
        x = #1;
        y = #2;
       r=(x*x+y*y)^0.5
       tex.print(tostring(r))}
}

结果\luaveclen{0.0003}{0.0004}为 0.0005。

我需要小数,因为这里veclen 的问题 我现在的答案是错误的。

我找到了一个使用 fpu 的解决方案,但它并不优雅:

%!TEX TS-program =  lualatex
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{luatextra}   
\usepackage{tikz}
\usetikzlibrary{decorations.markings,fpu}   

\begin{document}

\makeatletter     

\def\luaveclen#1#2{
    \directlua{
        x = #1;
        y = #2;
       r=(x*x+y*y)^0.5
       tex.print(tostring(r))}
}

\pgfmathdeclarefunction*{veclen}{2}{%
\begingroup
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
\pgfmathparse{\luaveclen{#1}{#2}}
  \edef\pgfmath@tmp{\pgfmathresult}
  \pgfmath@returnone\pgfmath@tmp pt
\endgroup
}
\makeatother  

\pgfmathparse{veclen(0.00003,0.00004)}
 Vector length is: \pgfmathresult    

\begin{tikzpicture}[decoration={markings, mark = at position .5 with
 {\draw (-2pt,-2pt) -- (2pt,2pt)  (2pt,-2pt) -- (-2pt,2pt);}}]    

\draw [postaction={decorate}] (0,0) -- ++(146:1) arc (146:157:1) -- (0,0);
\end{tikzpicture} 
\luaveclen{0.0003}{0.0004}

\end{document} 

答案1

您可以使用该string.format功能:

%!TEX TS-program =  lualatex
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{luatextra}   
\usepackage{tikz}
\usetikzlibrary{decorations.markings,fpu}   
\usepackage{luacode}

\begin{document}

\makeatletter     
\begin{luacode*}
function get_real_number(r)
return string.format("%f", r)
end
\end{luacode*}
\def\luaveclen#1#2{%
  \directlua{
x = #1;
y = #2;
r=(x*x+y*y)^0.5
tex.print(get_real_number(r))
}}

\luaveclen{0.0003}{0.0004}

\end{document} 

相关内容