Не понимаю, что происходит, когда я использую parseFloat

Так что в основном у меня есть система, которая показывает, что вы часто покупаете вместе вещи. Однако мне нужно отобразить значение для всего пакета, в основном элемент 1 + элемент 2 + элемент 3. Итак, что я пытаюсь сделать, это взять промежуток, к которому добавлена ​​цена, использовать для него метод $.text(), затем суммировать все числа, однако я не могу их получить, когда я использую parseFloat(), он возвращает NaN моя функция getPrice выглядит так:

function getPrice(discount) {   
        var total_price = 0;
        var active_products = 0;
        $('.bundle-product-checkbox').each(function() {
            if ($(this).prop('checked') == true) {
                var price = parseFloat($('.bundle-fbt-price > .money').text());
                total_price += price;
                active_products++;
                console.info(total_price);                       
            }
    });

if (active_products == $('.bundle-product-checkbox').length) {
    var savings = (discount / 100) * total_price;
    var discountedPrice = total_price - (discount / 100) * total_price;
    $('.full-bundle-price').text(total_price + ' $').css("text-decoration", "line-through");
    $('.discounted-bundle-price').text(discountedPrice + ' $');
    $('.bundle-savings').text('You save ' + savings + ' $');
} else if (active_products == 0) {
    $('.bundle-add').fadeOut('fast');
} else {
    $('.full-bundle-price').text('Total Price: ' + total_price + ' $');
    $('.full-bundle-price').css("text-decoration", "none");
    $('.discounted-bundle-price').text('');
    $('.bundle-savings').text('');
}

Мой html для этой части

{foreach from=$products item=p key=k}
<div style = "display:inline-block;float:left;width:100%;">
    <input type = "checkbox" checked = "checked" class = "bundle-product-checkbox" name = "bundle-product-list" data-toggle = "{$k}" />
    <span class = "bundle-title">{if $k==0 }<b>This Item: {/if}{$p.title} {if $k==0 }</b>{/if}</span> 
                    {if isset($p.variants)}
                        {if $p.variants_count > 1}
                            <select class = "vitals_recommended_select bundle_fbt_select">
                                {foreach $p.variants item=v}
                                    <option value = "{$v.id}" class = "bundle-fbt-money" data-vitals-price = "{if $display_currency_code}{$shop.money_with_currency_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$v.price}{else}{$shop.money_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$v.price}{/if}" data-vitals-discount = "{if $v.discount}-{$v.discount}%{else}0{/if}">{$v.title}</option>
                                {/foreach}
                            </select>
                            <p class = "vitals-product-price bundle-fbt-price">{if $display_currency_code}{$shop.money_with_currency_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{else}{$shop.money_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{/if} {if $p.variants[0].discount} <span class = "vitals-product-discount">-{$p.variants[0].discount}%</span>{/if}</p>
                        {else}
                            <p class = "vitals-product-price bundle-fbt-price">{if $display_currency_code}{$shop.money_with_currency_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{else}{$shop.money_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{/if} {if $p.variants[0].discount}<span class = "vitals-product-discount">-{$p.variants[0].discount}%</span>{/if}</p>
                        {/if}
                    {/if}
</div>
{/foreach}

Любые идеи?

Также покажите свой HTML.

31piy 07.06.2018 13:51

Можете ли вы показать журнал $ ('. bundle-fbt-price> .money'). text ()

Ullas Hunka 07.06.2018 13:52

Я предполагаю, что $('.bundle-fbt-price > .money').text() содержит не только числовые значения, но, возможно, также символ валюты или, возможно, настоящие слова? - Сделайте console.info($('.bundle-fbt-price > .money').text()), чтобы увидеть, что вы пытаетесь обработать.

Nope 07.06.2018 13:53

@UllasHunka, лог - VM598: 1 $ 91,00 долларов США 45 долларов США 229 долларов США

Cristi Duma 07.06.2018 13:59

@ 31piy готово, отредактировал

Cristi Duma 07.06.2018 14:01

@CristiDuma Как вы собираетесь анализировать все это как плавающее?

cнŝdk 07.06.2018 14:01

@ chŝdk ну что мне делать в таком случае?

Cristi Duma 07.06.2018 14:06

@CristiDuma Вам нужно брать только числовые значения из входной строки. Я отправляю ответ.

cнŝdk 07.06.2018 14:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Don't understand what's happening when I use parseFloat ?

Что ж, все, что происходит, - это то, что значения, которые вы пытаетесь проанализировать, не являются синтаксическими, потому что они начинаются с и содержат буквенные символы, поэтому они не могут быть проанализированы и вернут NaN.

Если значение, которое вы пытаетесь проанализировать, выглядит следующим образом:

VM598:1 $91.00 USD$45.00 USD$229.00 USD

Вам нужно обработать его, чтобы вы могли его проанализировать, вы можете использовать split и regexp, чтобы извлечь из него все значения.

Вот что вы можете сделать:

var content = "VM598:1 $91.00 USD$45.00 USD$229.00 USD";

var values = content.split(":")[1].split(/\$|USD/).filter((v, i) => {
  return v !== "" && i > 0;
}).map(v => v.trim());
console.info(values);

var amounts = values.map(x => parseFloat(x));
console.info(amounts);

Спасибо, сэр. Хороший ответ

Cristi Duma 07.06.2018 14:21

Другие вопросы по теме