joulev
So let's assume that I have a command \foo that changes the value of a fp variable, and then "display" (return?) it.

This \foo works.

tex
% arara: pdflatex
\documentclass{article}
\usepackage[enable-debug]{expl3}
\usepackage{xparse}
\usepackage{tikz}
\ExplSyntaxOn
\debug_on:n {all}
\fp_new:N \l_foo_fp
\NewDocumentCommand \foo {m}
{
\fp_set:Nn \l_foo_fp { #1 }
\fp_to_dim:N \l_foo_fp
}
\ExplSyntaxOff
\begin{document}
\foo{1cm}
\end{document}


![blob](/image?hash=1f8faae7acab77d397ff85a2546946a7357abbbf4783fe2321fbc045fb3b1a01)

All good! Let's use the command to construct some Ti*k*Z paths.

tex
% arara: pdflatex
\documentclass{article}
\usepackage[enable-debug]{expl3}
\usepackage{xparse}
\usepackage{tikz}
\ExplSyntaxOn
\debug_on:n {all}
\fp_new:N \l_foo_fp
\NewDocumentCommand \foo {m}
{
\fp_set:Nn \l_foo_fp { #1 }
\fp_to_dim:N \l_foo_fp
}
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (\foo{1cm});
\end{tikzpicture}
\end{document}

% ! LaTeX3 Error: A floating point with value '0' was misused.
%
% To obtain the value of a floating point variable, use '\fp_to_decimal:N',
% '\fp_to_tl:N', or other conversion functions.


It doesn't work. I have tried all sensible \fp_to_*:N I can think of without success. Using \l_foo_fp only, with or without \fp_use:N, also fail.

Not sure if this is even related to Ti*k*Z, because the error message is a LaTeX3 Error. Anyway, how to deal with this?
marmot
You want an expandable variant thereof. This expandable variant already exists. It is given in xfp.sty.


\NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
\NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} }



\documentclass{article}
\usepackage[enable-debug]{expl3}
\usepackage{xfp}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\end{tikzpicture}
\end{document}


![Screen Shot 2020-04-23 at 12.28.57 PM.png](/image?hash=2efc91e6777b84fab289bb05a9f8b4ffb690599eaba2a7f1dee96bae54d6b00b)

A few comments are in order.
1. \fpeval strips units (and so does \pgfmathsetmacro), so we had to add *1pt. Ti*k*Z has a very delicate mechanism that checks whether or not an expression which it encounters in a coordinate, say, has units. By using xfp we disable this mechanism and need to be more careful than in plain Ti*k*Z.
2. You could try to combine Ti*k*Z's mechanism of checkign whether the thing has units with xfp. While this will be definitely a hack, it should be possible.
3. There is the fpu library. It does not always yield very precise results but allows one to get rid of the dimension too large errors. For plain Ti*k*Z purposes the precision is usually more than sufficient.
4. You may have the at first sight great idea to replace \pgfmathparse (and \pgfmathsetmacro) by an xfp variant. This idea is unfortunately not that great. Why? pgf has tons of functions, and so does expl3, but the function names do not always coincide. (It would be great, though, if an expl3 witch or wizard could add a switch that makes the pgf functions known to expl3. Whether or not this is possible even in principle, I do not know.) What is more, even if that worked, this won't fix the dimension too large errors, at least not completely, since many of them come from plain TeX computations without any \pgfmathparse. However, empirically one finds that replacing \pgfmathreciprocal@ by an fpu variant a substantial fraction of these errors disappears. This will also be true if we replace \pgfmathreciprocal@ by an xfp variant (but it will be hard to find one example in which the gain in precision  is relevant).

Let me expand a bit on the Ti*k*Zy mechanism to check for units/dimensions. The main instrument here is \ifpgfmathunitsdeclared, see this excerpt from pgfmanual v3.1.5 on p. 1028

![Screen Shot 2020-04-23 at 1.48.03 PM.png](/image?hash=5a5ca11fcaf6a64bda1d38ea09076cb2678c5220fda12ab4cbb27fafba77d3b8)

This allows you to define a style that uses xfp and checks units in the usual Ti*k*Zy fashion.


\documentclass{article}
\usepackage[enable-debug]{expl3}
\usepackage{xfp}
\usepackage{tikz}
\tikzset{%
\pgfmathparse{#1}%
\ifpgfmathunitsdeclared
\else
\fi
}%
}%

\begin{document}
\begin{tikzpicture}