计算每份产品的价格
Calculating a price per serving of a product
您好,我正在尝试创建一个计算,以根据以欧元为单位并以逗号分隔的产品价格以及您可以从中获得的份量来计算每份价格括号。
所以我的想法是得到价格,然后将价格除以份数,即:
49,90 / 14 = 3.56
下面是我的代码。请注意我无法移动任何代码,这是它在网站上的显示方式。
如有任何帮助,我们将不胜感激。
function getDiscount() {
var pattern = /[^0-9\.]/g;
var pattern2 = (/\(*(\d+.\d+)\)/)[0];
var price = parseFloat($(".from_price").text().replace(pattern, ""));
var serving = parseFloat($(".servingScoop").text().match(pattern2).join().replace(pattern, ""));
var pricePerScroop = (Math.abs(price/serving));
$("#discount").html("€" + pricePerScroop.toFixed(2));
$(".scoop").click(getDiscount);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">€49,90</div>
<div class="servingScoop">100 grams (14 servings) </div>
<button type="button" onclick="getDiscount()">get discount</button>
<div id="discount"></div>
你的逻辑差不多了,但是有三个问题。首先,您要替换价格字符串中的任何 non-digit 字符,因此 €49,90
变为 4990
。因此,您需要将其除以 100,将其从美分转换为欧元,以便在计算中使用该值。
其次,用于检索服务数量的 Regex 语法不正确。您需要在不带括号且不尝试访问第 0 个元素的情况下声明正则表达式。正则表达式本身不应包含最后一个 )
值,因为您错过了 'servings' 这个词,这意味着它永远不会命中。
最后,当您开始使用该正则表达式时,您只需要获得第一个匹配项,而不是获得所有匹配项和 join/replace 它们。
综上所述,试试这个:
jQuery($ => {
$('button').on('click', () => {
var pattern = /[^0-9\.]/g;
var pattern2 = /\((\d+)/;
var price = parseFloat($(".from_price").text().replace(pattern, "")) / 100;
var serving = parseFloat($(".servingScoop").text().match(pattern2)[1]);
var pricePerScroop = Math.abs(price / serving);
$("#discount").html("€" + pricePerScroop.toFixed(2));
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">€49,90</div>
<div class="servingScoop">100 grams (14 servings)</div>
<button type="button">get discount</button>
<div id="discount"></div>
您好,我正在尝试创建一个计算,以根据以欧元为单位并以逗号分隔的产品价格以及您可以从中获得的份量来计算每份价格括号。
所以我的想法是得到价格,然后将价格除以份数,即: 49,90 / 14 = 3.56
下面是我的代码。请注意我无法移动任何代码,这是它在网站上的显示方式。
如有任何帮助,我们将不胜感激。
function getDiscount() {
var pattern = /[^0-9\.]/g;
var pattern2 = (/\(*(\d+.\d+)\)/)[0];
var price = parseFloat($(".from_price").text().replace(pattern, ""));
var serving = parseFloat($(".servingScoop").text().match(pattern2).join().replace(pattern, ""));
var pricePerScroop = (Math.abs(price/serving));
$("#discount").html("€" + pricePerScroop.toFixed(2));
$(".scoop").click(getDiscount);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">€49,90</div>
<div class="servingScoop">100 grams (14 servings) </div>
<button type="button" onclick="getDiscount()">get discount</button>
<div id="discount"></div>
你的逻辑差不多了,但是有三个问题。首先,您要替换价格字符串中的任何 non-digit 字符,因此 €49,90
变为 4990
。因此,您需要将其除以 100,将其从美分转换为欧元,以便在计算中使用该值。
其次,用于检索服务数量的 Regex 语法不正确。您需要在不带括号且不尝试访问第 0 个元素的情况下声明正则表达式。正则表达式本身不应包含最后一个 )
值,因为您错过了 'servings' 这个词,这意味着它永远不会命中。
最后,当您开始使用该正则表达式时,您只需要获得第一个匹配项,而不是获得所有匹配项和 join/replace 它们。
综上所述,试试这个:
jQuery($ => {
$('button').on('click', () => {
var pattern = /[^0-9\.]/g;
var pattern2 = /\((\d+)/;
var price = parseFloat($(".from_price").text().replace(pattern, "")) / 100;
var serving = parseFloat($(".servingScoop").text().match(pattern2)[1]);
var pricePerScroop = Math.abs(price / serving);
$("#discount").html("€" + pricePerScroop.toFixed(2));
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">€49,90</div>
<div class="servingScoop">100 grams (14 servings)</div>
<button type="button">get discount</button>
<div id="discount"></div>