在将两个字符串解析为浮点值时如何保持零

问题描述 投票:0回答:5

我正在尝试创建一个将两个字符串转换为浮点值的函数。

一些外部方创建了一个带有后端的主题,您应该在其中提供价格的值:

  • priceBeforeComma
  • priceAfterComma

在html中,这将转换为:

<span>55,<sup>07</sup></span>

我需要做一些计算价格作为浮动,然后再将其拆分为html,就像你在上面看到的那样。

我有一个非常好的功能:

function parsePrice(price, priceDecimal) {
    return parseFloat(price + "." + priceDecimal);
}

然而,我面临的问题是,假设我提供07作为上面的小数,前导零被删除,返回55,7

55,0755,7之间有很大的不同。我期望像55,07一样回归零。

任何帮助都感激不尽。

javascript
5个回答
0
投票

Floats代表0707.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>

0
投票

这可能是过度的,但您可以使用能够完全控制数字如何转换为字符串的内容,反之亦然,例如: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' }

你去,那是一个非常完整的解决方案!甚至处理负数。


0
投票

您应该通过在数字周围加上引号来将字符串传递给您的函数。使用数字总是会有删除任何前导零的警告。

function parsePrice(price, priceDecimal) {
    return parseFloat(price + "." + priceDecimal);
}
parsePrice("55", "07");

0
投票

你的守则是对的

function parsePrice(price, priceDecimal) {
return parseFloat(price + "." + priceDecimal);
}
parsePrice("55", "07");

如果你发送parsePrice(“55”,“07”)所以你不需要将它除以100,因为你可能发送它007然后你应该除以1000.但是如果发送字符串你的代码将正常工作


-1
投票

为什么不将它们作为整数分别解析并以正确的比例将它们加在一起?

    function parsePrice(price, priceDecimal) {
        return parseInt(price) + (parseInt(priceDecimal) / 100);
    }

console.log(parsePrice("55", "07"));
© www.soinside.com 2019 - 2024. All rights reserved.