我正在尝试创建一个将两个字符串转换为浮点值的函数。
一些外部方创建了一个带有后端的主题,您应该在其中提供价格的值:
在html中,这将转换为:
<span>55,<sup>07</sup></span>
我需要做一些计算价格作为浮动,然后再将其拆分为html,就像你在上面看到的那样。
我有一个非常好的功能:
function parsePrice(price, priceDecimal) {
return parseFloat(price + "." + priceDecimal);
}
然而,我面临的问题是,假设我提供07
作为上面的小数,前导零被删除,返回55,7
。
55,07
和55,7
之间有很大的不同。我期望像55,07
一样回归零。
任何帮助都感激不尽。
Floats代表07
为07.0
,所以为了让它正常工作,你需要把它写成0.07
。
这对我有用:
function parsePrice(price, priceDecimal) {
return parseFloat(price + priceDecimal);
}
var output = parsePrice(57, 0.07);
document.getElementById("test").innerHTML = output.toString().replace(".", ",");
<p id="test"></p>
这可能是过度的,但您可以使用能够完全控制数字如何转换为字符串的内容,反之亦然,例如:https://github.com/alexei/sprintf.js我没有使用过该库,但它承诺提供与C printf相同的功能,会允许你保持领先的零。请在此处查看“C”语言问题的答案:Printing leading 0's in C?
(但是,另外,请参阅上面的评论 - 通常最好以整数算术而不是浮点数进行财务计算。)
所以我的建议是这样做:
function price(dollars, cents) { // adjust for your currency
return parseInt(dollars)*100 + parseInt(cents);
}
function dollarsAndCents(price) {
let sign = "+";
if (price<0) {
sign = "-";
price = -price;
}
let cents = price % 100;
let dollars = (price-cents)/100;
dollars = dollars.toString();
cents = cents.toString();
if (cents.length<2) cents = "0" + cents;
return {sign: sign, dollars: dollars, cents: cents}
}
let price1 = price ("55", "07");
let price2 = price ("99", "99");
let total = price1 + price2;
console.log(dollarsAndCents(total))
//{ sign: '+', dollars: '155', cents: '06' }
let refund = -12345
console.log(dollarsAndCents(refund))
//{ sign: '-', dollars: '123', cents: '45' }
你去,那是一个非常完整的解决方案!甚至处理负数。
您应该通过在数字周围加上引号来将字符串传递给您的函数。使用数字总是会有删除任何前导零的警告。
function parsePrice(price, priceDecimal) {
return parseFloat(price + "." + priceDecimal);
}
parsePrice("55", "07");
你的守则是对的
function parsePrice(price, priceDecimal) {
return parseFloat(price + "." + priceDecimal);
}
parsePrice("55", "07");
如果你发送parsePrice(“55”,“07”)所以你不需要将它除以100,因为你可能发送它007然后你应该除以1000.但是如果发送字符串你的代码将正常工作
为什么不将它们作为整数分别解析并以正确的比例将它们加在一起?
function parsePrice(price, priceDecimal) {
return parseInt(price) + (parseInt(priceDecimal) / 100);
}
console.log(parsePrice("55", "07"));