将float移动到对象会将其转换为字符串

时间:2016-07-24 21:08:05

标签: javascript json casting

我使用以下代码:

entries.category[newcat].subcategory[newsub].items[n] = {
            name: $("#name").val(),
            shortcut: $("#short").val(),
            description: $("#desc").val(),
            price: parseFloat($("#price").val()).toFixed(2),
            vat: parseFloat($("#vat").val()).toFixed(2)
        };

然而,当我立即使用JSON.stringify进行检查时,priceVAT都会附加为字符串,即“10.50”(而不是10.50)。

问题:如何确保价格和增值税存储为浮动?

非常感谢!

2 个答案:

答案 0 :(得分:2)

使用单一+转换字符串值。输入元素值始终是字符串,即使您应用 parseFloat ,但再次将 toFixed 应用于该字符串,也会将数字转回字符串。假设您要保持 toFixed 调用以限制小数位数,请使用+对数字进行最终强制执行:

entries.category[newcat].subcategory[newsub].items[n] = {
    name: $("#name").val(),
    shortcut: $("#short").val(),
    description: $("#desc").val(),
    price: +parseFloat($("#price").val()).toFixed(2),
    vat: +parseFloat($("#vat").val()).toFixed(2)
};

为了避免从string-to-float-to-string-to-float的转换,你可以写:

    price: Math.round($("#price").val()*100)/100,

......等,以达到相同的最终结果。 Math.round会强制论证float

答案 1 :(得分:0)

使用toFix(2)将结果转换回字符串。要将值保持为float,您需要将toFix(2)的结果传递给另一个parseFloat

parseFloat(parseFloat($("#vat").val()).toFixed(2))