To each his/her favourite math engine...

Update: using \xinttheexpr...\relax
for infix notations. But it doesn't seem that \SI
does a full expansion immediately, it first apparently parses for (
and )
among others. So I had to do a little trick with a \firstofone
.
\documentclass{article}
\usepackage{siunitx,xintexpr}
\providecommand\firstofone [1]{#1}
% We use this \firstofone trick to hide ( and ) from the \SI parser.
% Braces can not be used inside \xinttheexpr...\relax for this purpose
\newcommand*{\celsiusfromkelvin}[2][2]
{\SI{\firstofone {\xinttheexpr round(#2-273.15,#1)\relax}}{\celsius}}
\newcommand*{\celsiusfromfahrenheit}[2][2]
{\SI{\firstofone {\xinttheexpr round((#2-32)*5/9,#1)\relax}}{\celsius}}
\newcommand*{\fahrenheitfromkelvin}[2][2]
{\SI{\firstofone {\xinttheexpr round(1.8*#2-459.67,#1)\relax}}{\fahrenheit}}
\newcommand*{\fahrenheitfromcelsius}[2][2]
{\SI{\firstofone {\xinttheexpr round(1.8*#2+32,#1)\relax}}{\fahrenheit}}
\newcommand*{\kelvinfromcelsius}[2][2]
{\SI{\firstofone {\xinttheexpr round(#2+273.15,#1)\relax}}{\kelvin}}
\newcommand*{\kelvinfromfahrenheit}[2][2]
{\SI{\firstofone {\xinttheexpr round((#2+459.67)*5/9,#1)\relax}}{\kelvin}}
\DeclareSIUnit[number-unit-product=\,]
\fahrenheit{\SIUnitSymbolDegree F}
\begin{document}
\celsiusfromkelvin {300} (\SI{300}{\kelvin})
\fahrenheitfromkelvin {300} (\SI{300}{\kelvin})
\celsiusfromfahrenheit {80.33} (\SI{80.33}{\fahrenheit})
\fahrenheitfromcelsius {26.85} (\SI{26.85}{\celsius})
\kelvinfromcelsius {26.85} (\SI{26.85}{\celsius})
\kelvinfromfahrenheit {80.33} (\SI{80.33}{\fahrenheit})
\celsiusfromfahrenheit [4] {80} (\SI{80}{\fahrenheit})
\fahrenheitfromcelsius [4] {26.6667} (\SI{26.6667}{\celsius})
\fahrenheitfromcelsius [4] {26.66667} (\SI{26.66667}{\celsius})
\end{document}
Earlier method, without infix notations
\documentclass{article}
\usepackage{siunitx,xintfrac}
\newcommand*{\celsiusfromkelvin}[2][2]
{\SI{\xintRound{#1}{\xintSub{#2}{273.15}}}{\celsius}}
\newcommand*{\celsiusfromfahrenheit}[2][2]
{\SI{\xintRound{#1}{\xintMul{\xintSub{#2}{32}}{5/9}}}{\celsius}}
\newcommand*{\fahrenheitfromkelvin}[2][2]
{\SI{\xintRound{#1}{\xintSub{\xintMul{#2}{1.8}}{459.67}}}{\fahrenheit}}
\newcommand*{\fahrenheitfromcelsius}[2][2]
{\SI{\xintRound{#1}{\xintAdd{\xintMul{#2}{1.8}}{32}}}{\fahrenheit}}
\newcommand*{\kelvinfromcelsius}[2][2]
{\SI{\xintRound{#1}{\xintAdd{#2}{273.15}}}{\kelvin}}
\newcommand*{\kelvinfromfahrenheit}[2][2]
{\SI{\xintRound{#1}{\xintMul{\xintAdd{#2}{459.67}}{5/9}}}{\kelvin}}
\DeclareSIUnit[number-unit-product=\,]
\fahrenheit{\SIUnitSymbolDegree F}
\begin{document}
\celsiusfromkelvin {300} (\SI{300}{\kelvin})
\fahrenheitfromkelvin {300} (\SI{300}{\kelvin})
\celsiusfromfahrenheit {80.33} (\SI{80.33}{\fahrenheit})
\fahrenheitfromcelsius {26.85} (\SI{26.85}{\celsius})
\kelvinfromcelsius {26.85} (\SI{26.85}{\celsius})
\kelvinfromfahrenheit {80.33} (\SI{80.33}{\fahrenheit})
\celsiusfromfahrenheit [4] {80} (\SI{80}{\fahrenheit})
\fahrenheitfromcelsius [4] {26.6667} (\SI{26.6667}{\celsius})
\fahrenheitfromcelsius [4] {26.66667} (\SI{26.66667}{\celsius})
\end{document}
fp
-package solution in this answer: tex.stackexchange.com/a/87825