Test of integers? Or, round the number if the first two decimal numbers are sufficiently close to 0 or 1?












6














The following is a MWE, which explains my intention.



documentclass{article}
usepackage{tikz}
usetikzlibrary{math}
begin{document}
tikzmath{
integer = 4/2; decimal = 5/3;
integerB=1/3*3;
}
$integer$ is an integer, and it should be printed as 2.
And $decimal$ is a decimal number, I would like to round it to 1.7.
Another difficulty is that $integerB$ is an integer in fact,
and should be printed as 1.
end{document}


I wonder if it is possible to test a number to determine it is an integer. Alternatively, it would also be great if it is possible to determine whether the first two decimal numbers are sufficiently close to 0 or 1.










share|improve this question









New contributor




Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    6














    The following is a MWE, which explains my intention.



    documentclass{article}
    usepackage{tikz}
    usetikzlibrary{math}
    begin{document}
    tikzmath{
    integer = 4/2; decimal = 5/3;
    integerB=1/3*3;
    }
    $integer$ is an integer, and it should be printed as 2.
    And $decimal$ is a decimal number, I would like to round it to 1.7.
    Another difficulty is that $integerB$ is an integer in fact,
    and should be printed as 1.
    end{document}


    I wonder if it is possible to test a number to determine it is an integer. Alternatively, it would also be great if it is possible to determine whether the first two decimal numbers are sufficiently close to 0 or 1.










    share|improve this question









    New contributor




    Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      6












      6








      6


      0





      The following is a MWE, which explains my intention.



      documentclass{article}
      usepackage{tikz}
      usetikzlibrary{math}
      begin{document}
      tikzmath{
      integer = 4/2; decimal = 5/3;
      integerB=1/3*3;
      }
      $integer$ is an integer, and it should be printed as 2.
      And $decimal$ is a decimal number, I would like to round it to 1.7.
      Another difficulty is that $integerB$ is an integer in fact,
      and should be printed as 1.
      end{document}


      I wonder if it is possible to test a number to determine it is an integer. Alternatively, it would also be great if it is possible to determine whether the first two decimal numbers are sufficiently close to 0 or 1.










      share|improve this question









      New contributor




      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      The following is a MWE, which explains my intention.



      documentclass{article}
      usepackage{tikz}
      usetikzlibrary{math}
      begin{document}
      tikzmath{
      integer = 4/2; decimal = 5/3;
      integerB=1/3*3;
      }
      $integer$ is an integer, and it should be printed as 2.
      And $decimal$ is a decimal number, I would like to round it to 1.7.
      Another difficulty is that $integerB$ is an integer in fact,
      and should be printed as 1.
      end{document}


      I wonder if it is possible to test a number to determine it is an integer. Alternatively, it would also be great if it is possible to determine whether the first two decimal numbers are sufficiently close to 0 or 1.







      tables tikzmath decimal-number






      share|improve this question









      New contributor




      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 2 hours ago









      egreg

      709k8618823164




      709k8618823164






      New contributor




      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 2 hours ago









      Glenn

      311




      311




      New contributor




      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Glenn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          3 Answers
          3






          active

          oldest

          votes


















          3














          One cannot say from its floating point representation whether the output of an arithmetic operation involving division or non rational operations is actually an integer.



          You can consider the l3fp module of expl3, available through the package xfp.



          documentclass{article}
          usepackage{xfp}

          begin{document}

          $fpeval{5/3}$ is a decimal number, I would like to round it to
          $fpeval{round(5/3,1)}$ or to $fpeval{round(5/3,2)}$

          Another difficulty is that $fpeval{(1/3)*3}$ is an integer in fact,
          and should be printed as $fpeval{round((1/3)*3,1)}$ or
          $fpeval{round((1/3)*3,2)}$.

          end{document}


          enter image description here






          share|improve this answer





























            2














            If the accuracy of your numbers is important you might consider farming that out to a computer algebra system (CAS). The sagetex package relies on the CAS Sage; the documentation can be found on CTAN right here. Documentation on Sage is found here .Sage is not part of the LaTeX distribution (it's big) so it needs to be installed on your computer or, even easier, accessed through a free Cocalc account.



            documentclass{article}
            usepackage{sagetex}
            usepackage{tikz}
            usetikzlibrary{math}
            begin{document}
            begin{sagesilent}
            a = 4/2
            b = 5/3
            c = 1/3*3
            end{sagesilent}
            $sage{a}$ is an integer, and it should be printed as $sage{a}$.
            And $sage{b}$ is not an integer. As a decimal it is approximately
            $sage{b.n(digits=6)}$. I would like to round it to $sage{b.n(digits=1)}$.
            Another difficulty is that $sage{c}$ is an integer in fact,
            and should be printed as $sage{c}$.
            end{document}


            The output, running in Cocalc, gives:
            enter image description here



            Notice that Sage interprets your numbers correctly: 4/2 is recognized as 2 and 1/3*3 is recognized as 1. It does need to know the format you want of non integers; but it recognizes that 5/3 is a fraction that can't be reduced and leaves it as a fraction. To force it into a decimal and to specify the number of digits we append .n(digits=6); the documentation is here.






            share|improve this answer





























              2














              Assuming that this is a question on how to do this with tikzmath, I'd do



              documentclass{article}
              usepackage{tikz}
              usetikzlibrary{math}
              begin{document}
              tikzmath{
              function myint(x) {
              if abs(x-round(x)) < 0.1 then { print{x is an integernewline};
              return int(round(x));
              } else { print{x is not an integernewline};
              return x;
              }; };
              integer = myint(4/2);
              decimal = myint(5/3);
              integerB= myint(1/3*3);
              }


              $integer$ is an integer, and it should be printed as 2.
              And $pgfmathprintnumber[precision=1]{decimal}$ is a decimal number, I would like to round it to 1.7.
              Another difficulty is that $integerB$ is an integer in fact,
              and should be printed as 1.
              end{document}


              enter image description here



              Note that I used pgfmathprintnumber to round to one digit after the dot. Of course, you can remove the prints.






              share|improve this answer























                Your Answer








                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "85"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: false,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: null,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });






                Glenn is a new contributor. Be nice, and check out our Code of Conduct.










                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f468046%2ftest-of-integers-or-round-the-number-if-the-first-two-decimal-numbers-are-suff%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                3 Answers
                3






                active

                oldest

                votes








                3 Answers
                3






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                3














                One cannot say from its floating point representation whether the output of an arithmetic operation involving division or non rational operations is actually an integer.



                You can consider the l3fp module of expl3, available through the package xfp.



                documentclass{article}
                usepackage{xfp}

                begin{document}

                $fpeval{5/3}$ is a decimal number, I would like to round it to
                $fpeval{round(5/3,1)}$ or to $fpeval{round(5/3,2)}$

                Another difficulty is that $fpeval{(1/3)*3}$ is an integer in fact,
                and should be printed as $fpeval{round((1/3)*3,1)}$ or
                $fpeval{round((1/3)*3,2)}$.

                end{document}


                enter image description here






                share|improve this answer


























                  3














                  One cannot say from its floating point representation whether the output of an arithmetic operation involving division or non rational operations is actually an integer.



                  You can consider the l3fp module of expl3, available through the package xfp.



                  documentclass{article}
                  usepackage{xfp}

                  begin{document}

                  $fpeval{5/3}$ is a decimal number, I would like to round it to
                  $fpeval{round(5/3,1)}$ or to $fpeval{round(5/3,2)}$

                  Another difficulty is that $fpeval{(1/3)*3}$ is an integer in fact,
                  and should be printed as $fpeval{round((1/3)*3,1)}$ or
                  $fpeval{round((1/3)*3,2)}$.

                  end{document}


                  enter image description here






                  share|improve this answer
























                    3












                    3








                    3






                    One cannot say from its floating point representation whether the output of an arithmetic operation involving division or non rational operations is actually an integer.



                    You can consider the l3fp module of expl3, available through the package xfp.



                    documentclass{article}
                    usepackage{xfp}

                    begin{document}

                    $fpeval{5/3}$ is a decimal number, I would like to round it to
                    $fpeval{round(5/3,1)}$ or to $fpeval{round(5/3,2)}$

                    Another difficulty is that $fpeval{(1/3)*3}$ is an integer in fact,
                    and should be printed as $fpeval{round((1/3)*3,1)}$ or
                    $fpeval{round((1/3)*3,2)}$.

                    end{document}


                    enter image description here






                    share|improve this answer












                    One cannot say from its floating point representation whether the output of an arithmetic operation involving division or non rational operations is actually an integer.



                    You can consider the l3fp module of expl3, available through the package xfp.



                    documentclass{article}
                    usepackage{xfp}

                    begin{document}

                    $fpeval{5/3}$ is a decimal number, I would like to round it to
                    $fpeval{round(5/3,1)}$ or to $fpeval{round(5/3,2)}$

                    Another difficulty is that $fpeval{(1/3)*3}$ is an integer in fact,
                    and should be printed as $fpeval{round((1/3)*3,1)}$ or
                    $fpeval{round((1/3)*3,2)}$.

                    end{document}


                    enter image description here







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered 2 hours ago









                    egreg

                    709k8618823164




                    709k8618823164























                        2














                        If the accuracy of your numbers is important you might consider farming that out to a computer algebra system (CAS). The sagetex package relies on the CAS Sage; the documentation can be found on CTAN right here. Documentation on Sage is found here .Sage is not part of the LaTeX distribution (it's big) so it needs to be installed on your computer or, even easier, accessed through a free Cocalc account.



                        documentclass{article}
                        usepackage{sagetex}
                        usepackage{tikz}
                        usetikzlibrary{math}
                        begin{document}
                        begin{sagesilent}
                        a = 4/2
                        b = 5/3
                        c = 1/3*3
                        end{sagesilent}
                        $sage{a}$ is an integer, and it should be printed as $sage{a}$.
                        And $sage{b}$ is not an integer. As a decimal it is approximately
                        $sage{b.n(digits=6)}$. I would like to round it to $sage{b.n(digits=1)}$.
                        Another difficulty is that $sage{c}$ is an integer in fact,
                        and should be printed as $sage{c}$.
                        end{document}


                        The output, running in Cocalc, gives:
                        enter image description here



                        Notice that Sage interprets your numbers correctly: 4/2 is recognized as 2 and 1/3*3 is recognized as 1. It does need to know the format you want of non integers; but it recognizes that 5/3 is a fraction that can't be reduced and leaves it as a fraction. To force it into a decimal and to specify the number of digits we append .n(digits=6); the documentation is here.






                        share|improve this answer


























                          2














                          If the accuracy of your numbers is important you might consider farming that out to a computer algebra system (CAS). The sagetex package relies on the CAS Sage; the documentation can be found on CTAN right here. Documentation on Sage is found here .Sage is not part of the LaTeX distribution (it's big) so it needs to be installed on your computer or, even easier, accessed through a free Cocalc account.



                          documentclass{article}
                          usepackage{sagetex}
                          usepackage{tikz}
                          usetikzlibrary{math}
                          begin{document}
                          begin{sagesilent}
                          a = 4/2
                          b = 5/3
                          c = 1/3*3
                          end{sagesilent}
                          $sage{a}$ is an integer, and it should be printed as $sage{a}$.
                          And $sage{b}$ is not an integer. As a decimal it is approximately
                          $sage{b.n(digits=6)}$. I would like to round it to $sage{b.n(digits=1)}$.
                          Another difficulty is that $sage{c}$ is an integer in fact,
                          and should be printed as $sage{c}$.
                          end{document}


                          The output, running in Cocalc, gives:
                          enter image description here



                          Notice that Sage interprets your numbers correctly: 4/2 is recognized as 2 and 1/3*3 is recognized as 1. It does need to know the format you want of non integers; but it recognizes that 5/3 is a fraction that can't be reduced and leaves it as a fraction. To force it into a decimal and to specify the number of digits we append .n(digits=6); the documentation is here.






                          share|improve this answer
























                            2












                            2








                            2






                            If the accuracy of your numbers is important you might consider farming that out to a computer algebra system (CAS). The sagetex package relies on the CAS Sage; the documentation can be found on CTAN right here. Documentation on Sage is found here .Sage is not part of the LaTeX distribution (it's big) so it needs to be installed on your computer or, even easier, accessed through a free Cocalc account.



                            documentclass{article}
                            usepackage{sagetex}
                            usepackage{tikz}
                            usetikzlibrary{math}
                            begin{document}
                            begin{sagesilent}
                            a = 4/2
                            b = 5/3
                            c = 1/3*3
                            end{sagesilent}
                            $sage{a}$ is an integer, and it should be printed as $sage{a}$.
                            And $sage{b}$ is not an integer. As a decimal it is approximately
                            $sage{b.n(digits=6)}$. I would like to round it to $sage{b.n(digits=1)}$.
                            Another difficulty is that $sage{c}$ is an integer in fact,
                            and should be printed as $sage{c}$.
                            end{document}


                            The output, running in Cocalc, gives:
                            enter image description here



                            Notice that Sage interprets your numbers correctly: 4/2 is recognized as 2 and 1/3*3 is recognized as 1. It does need to know the format you want of non integers; but it recognizes that 5/3 is a fraction that can't be reduced and leaves it as a fraction. To force it into a decimal and to specify the number of digits we append .n(digits=6); the documentation is here.






                            share|improve this answer












                            If the accuracy of your numbers is important you might consider farming that out to a computer algebra system (CAS). The sagetex package relies on the CAS Sage; the documentation can be found on CTAN right here. Documentation on Sage is found here .Sage is not part of the LaTeX distribution (it's big) so it needs to be installed on your computer or, even easier, accessed through a free Cocalc account.



                            documentclass{article}
                            usepackage{sagetex}
                            usepackage{tikz}
                            usetikzlibrary{math}
                            begin{document}
                            begin{sagesilent}
                            a = 4/2
                            b = 5/3
                            c = 1/3*3
                            end{sagesilent}
                            $sage{a}$ is an integer, and it should be printed as $sage{a}$.
                            And $sage{b}$ is not an integer. As a decimal it is approximately
                            $sage{b.n(digits=6)}$. I would like to round it to $sage{b.n(digits=1)}$.
                            Another difficulty is that $sage{c}$ is an integer in fact,
                            and should be printed as $sage{c}$.
                            end{document}


                            The output, running in Cocalc, gives:
                            enter image description here



                            Notice that Sage interprets your numbers correctly: 4/2 is recognized as 2 and 1/3*3 is recognized as 1. It does need to know the format you want of non integers; but it recognizes that 5/3 is a fraction that can't be reduced and leaves it as a fraction. To force it into a decimal and to specify the number of digits we append .n(digits=6); the documentation is here.







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered 2 hours ago









                            DJP

                            7,05421629




                            7,05421629























                                2














                                Assuming that this is a question on how to do this with tikzmath, I'd do



                                documentclass{article}
                                usepackage{tikz}
                                usetikzlibrary{math}
                                begin{document}
                                tikzmath{
                                function myint(x) {
                                if abs(x-round(x)) < 0.1 then { print{x is an integernewline};
                                return int(round(x));
                                } else { print{x is not an integernewline};
                                return x;
                                }; };
                                integer = myint(4/2);
                                decimal = myint(5/3);
                                integerB= myint(1/3*3);
                                }


                                $integer$ is an integer, and it should be printed as 2.
                                And $pgfmathprintnumber[precision=1]{decimal}$ is a decimal number, I would like to round it to 1.7.
                                Another difficulty is that $integerB$ is an integer in fact,
                                and should be printed as 1.
                                end{document}


                                enter image description here



                                Note that I used pgfmathprintnumber to round to one digit after the dot. Of course, you can remove the prints.






                                share|improve this answer




























                                  2














                                  Assuming that this is a question on how to do this with tikzmath, I'd do



                                  documentclass{article}
                                  usepackage{tikz}
                                  usetikzlibrary{math}
                                  begin{document}
                                  tikzmath{
                                  function myint(x) {
                                  if abs(x-round(x)) < 0.1 then { print{x is an integernewline};
                                  return int(round(x));
                                  } else { print{x is not an integernewline};
                                  return x;
                                  }; };
                                  integer = myint(4/2);
                                  decimal = myint(5/3);
                                  integerB= myint(1/3*3);
                                  }


                                  $integer$ is an integer, and it should be printed as 2.
                                  And $pgfmathprintnumber[precision=1]{decimal}$ is a decimal number, I would like to round it to 1.7.
                                  Another difficulty is that $integerB$ is an integer in fact,
                                  and should be printed as 1.
                                  end{document}


                                  enter image description here



                                  Note that I used pgfmathprintnumber to round to one digit after the dot. Of course, you can remove the prints.






                                  share|improve this answer


























                                    2












                                    2








                                    2






                                    Assuming that this is a question on how to do this with tikzmath, I'd do



                                    documentclass{article}
                                    usepackage{tikz}
                                    usetikzlibrary{math}
                                    begin{document}
                                    tikzmath{
                                    function myint(x) {
                                    if abs(x-round(x)) < 0.1 then { print{x is an integernewline};
                                    return int(round(x));
                                    } else { print{x is not an integernewline};
                                    return x;
                                    }; };
                                    integer = myint(4/2);
                                    decimal = myint(5/3);
                                    integerB= myint(1/3*3);
                                    }


                                    $integer$ is an integer, and it should be printed as 2.
                                    And $pgfmathprintnumber[precision=1]{decimal}$ is a decimal number, I would like to round it to 1.7.
                                    Another difficulty is that $integerB$ is an integer in fact,
                                    and should be printed as 1.
                                    end{document}


                                    enter image description here



                                    Note that I used pgfmathprintnumber to round to one digit after the dot. Of course, you can remove the prints.






                                    share|improve this answer














                                    Assuming that this is a question on how to do this with tikzmath, I'd do



                                    documentclass{article}
                                    usepackage{tikz}
                                    usetikzlibrary{math}
                                    begin{document}
                                    tikzmath{
                                    function myint(x) {
                                    if abs(x-round(x)) < 0.1 then { print{x is an integernewline};
                                    return int(round(x));
                                    } else { print{x is not an integernewline};
                                    return x;
                                    }; };
                                    integer = myint(4/2);
                                    decimal = myint(5/3);
                                    integerB= myint(1/3*3);
                                    }


                                    $integer$ is an integer, and it should be printed as 2.
                                    And $pgfmathprintnumber[precision=1]{decimal}$ is a decimal number, I would like to round it to 1.7.
                                    Another difficulty is that $integerB$ is an integer in fact,
                                    and should be printed as 1.
                                    end{document}


                                    enter image description here



                                    Note that I used pgfmathprintnumber to round to one digit after the dot. Of course, you can remove the prints.







                                    share|improve this answer














                                    share|improve this answer



                                    share|improve this answer








                                    edited 22 mins ago

























                                    answered 52 mins ago









                                    marmot

                                    87.3k4100187




                                    87.3k4100187






















                                        Glenn is a new contributor. Be nice, and check out our Code of Conduct.










                                        draft saved

                                        draft discarded


















                                        Glenn is a new contributor. Be nice, and check out our Code of Conduct.













                                        Glenn is a new contributor. Be nice, and check out our Code of Conduct.












                                        Glenn is a new contributor. Be nice, and check out our Code of Conduct.
















                                        Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.





                                        Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                        Please pay close attention to the following guidance:


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f468046%2ftest-of-integers-or-round-the-number-if-the-first-two-decimal-numbers-are-suff%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Morgemoulin

                                        Scott Moir

                                        Souastre