<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[JS: Wie richtigerweise Strings nach int und float (mit begrenzten Nachkommastellen) konvertieren?]]></title><description><![CDATA[<p>Nabend,</p>
<p>gelesen hab ich schon viel, aber ich möchte wissen, was der &quot;Goldstandard&quot; wäre, um Strings, die numerische Werte enthalten (sollten), umzuwandeln. Bisher habe ich:</p>
<pre><code class="language-javascript">        function round_i(v) {
            let num = parseInt(v, 10);
            return isNaN(num) ? 0 : num;
        }

        function round_f(v, d = -1) {
            if (d &lt;= 0) {
                return Number(v);
            }
            return Number(v).toFixed(d);
            // Oder: return Number(Math.round(v + 'e' + d) + 'e-' + d); ?
        }

        /**
         * Nachbau der Rundungsmethode.
         * @param {number|string} value - Der zu rundende Wert
         * @param {number} decimals - Anzahl der Nachkommastellen
         * @param {boolean} halfUp - true für ROUND_HALF_UP (kaufmännisch), false für ROUND_DOWN (Abschneiden)
         * @return {string} Der gerundete Wert als formtierter String ohne abschließende Nullen
         */
        function round_s(value, decimals, halfUp) {
            // Falls der Wert als String kommt, in eine Zahl wandeln
            let num = Number(value);

            // Verhindert JavaScript-Fließkommafehler durch Skalierung (z.B. 10^2 = 100)
            let factor = Math.pow(10, decimals);
            let tempResult;

            if (halfUp) {
                // Kaufmännisches runden:
                // Math.round() rundet in JS standardmäßig kaufmännisch
                tempResult = Math.round(num * factor) / factor;
            } else {
                // Striktes Abschneiden (Gegen Null runden):
                // Math.trunc() schneidet die Nachkommastellen einfach ab (funktioniert für positiv wie negativ)
                tempResult = Math.trunc(num * factor) / factor;
            }

            return tempResult.toFixed(decimals);
        }
</code></pre>
<p>Jede Funktion soll sowohl mit Zeichenketten als auch mit schon umgewandelten Werten funktionieren (da ich in Vanilla-JS ja keine Typsicherheit habe). Optional soll die Anzahl der Nachkommastellen angegeben werden dürfen.</p>
<p><code>round_i</code> braucht logischerweise keinen Nachkommastellenparamter... Aber ist <code>parseInt</code> richtig, oder sollte eher <code>Math.round</code> an dieser Stelle verwendet werden? Sind die Default-Paramter so richtig? Und habe ich noch bestimmte Edge-Cases übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/355477/js-wie-richtigerweise-strings-nach-int-und-float-mit-begrenzten-nachkommastellen-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Jul 2026 17:13:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/355477.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Jul 2026 18:43:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to JS: Wie richtigerweise Strings nach int und float (mit begrenzten Nachkommastellen) konvertieren? on Mon, 20 Jul 2026 18:43:52 GMT]]></title><description><![CDATA[<p>Nabend,</p>
<p>gelesen hab ich schon viel, aber ich möchte wissen, was der &quot;Goldstandard&quot; wäre, um Strings, die numerische Werte enthalten (sollten), umzuwandeln. Bisher habe ich:</p>
<pre><code class="language-javascript">        function round_i(v) {
            let num = parseInt(v, 10);
            return isNaN(num) ? 0 : num;
        }

        function round_f(v, d = -1) {
            if (d &lt;= 0) {
                return Number(v);
            }
            return Number(v).toFixed(d);
            // Oder: return Number(Math.round(v + 'e' + d) + 'e-' + d); ?
        }

        /**
         * Nachbau der Rundungsmethode.
         * @param {number|string} value - Der zu rundende Wert
         * @param {number} decimals - Anzahl der Nachkommastellen
         * @param {boolean} halfUp - true für ROUND_HALF_UP (kaufmännisch), false für ROUND_DOWN (Abschneiden)
         * @return {string} Der gerundete Wert als formtierter String ohne abschließende Nullen
         */
        function round_s(value, decimals, halfUp) {
            // Falls der Wert als String kommt, in eine Zahl wandeln
            let num = Number(value);

            // Verhindert JavaScript-Fließkommafehler durch Skalierung (z.B. 10^2 = 100)
            let factor = Math.pow(10, decimals);
            let tempResult;

            if (halfUp) {
                // Kaufmännisches runden:
                // Math.round() rundet in JS standardmäßig kaufmännisch
                tempResult = Math.round(num * factor) / factor;
            } else {
                // Striktes Abschneiden (Gegen Null runden):
                // Math.trunc() schneidet die Nachkommastellen einfach ab (funktioniert für positiv wie negativ)
                tempResult = Math.trunc(num * factor) / factor;
            }

            return tempResult.toFixed(decimals);
        }
</code></pre>
<p>Jede Funktion soll sowohl mit Zeichenketten als auch mit schon umgewandelten Werten funktionieren (da ich in Vanilla-JS ja keine Typsicherheit habe). Optional soll die Anzahl der Nachkommastellen angegeben werden dürfen.</p>
<p><code>round_i</code> braucht logischerweise keinen Nachkommastellenparamter... Aber ist <code>parseInt</code> richtig, oder sollte eher <code>Math.round</code> an dieser Stelle verwendet werden? Sind die Default-Paramter so richtig? Und habe ich noch bestimmte Edge-Cases übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2625025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2625025</guid><dc:creator><![CDATA[Anon-81275]]></dc:creator><pubDate>Mon, 20 Jul 2026 18:43:52 GMT</pubDate></item></channel></rss>