Javascript parseFloat(number) - parseFloat(number2) 返回 int
Posted
技术标签:
【中文标题】Javascript parseFloat(number) - parseFloat(number2) 返回 int【英文标题】:Javascript parseFloat(number) - parseFloat(number2) returning int 【发布时间】:2014-03-11 13:32:05 【问题描述】:很抱歉,我需要帮助:(
我尝试将字符串转换为十进制,它可以工作,但我有一些问题:
number = document.getElementById("totalcost").innerhtml; //It is a string, but I am sure that it is a decimal
number2 = prodCost; //it is a string but in fact it is a decimal too
alert(parseFloat(number)); // prints good (if number is 88,9 it will print 88,9)
alert(parseFloat(number2)); // it's ok too
alert(parseFloat(number) - parseFloat(number2)); // this is not ok :(
//if number=88,9 and number2=17,77 I get 71 but i need 71,13
哦,伙计们,我很抱歉,我很傻。太感谢了!我已经连续工作了 9 个小时。真的很抱歉,谢谢大家!
【问题讨论】:
你的号码里真的有,
吗?
javascript parseFloat in Different Cultures的可能重复
【参考方案1】:
这看起来像是一个语言环境问题:parseFloat
仅将句点识别为小数点;当它到达逗号时它会停止解析,只给你整数值。不幸的是,没有办法改变这种行为。您需要将数字字符串中的逗号替换为句点才能获得十进制数。
【讨论】:
这似乎与 OP 的观察相矛盾(暗示他实际上并未使用 , 作为小数分隔符): > alert(parseFloat(number)); // 打印好(如果数字是 88,9,它将打印 88,9) @Tibos - 我同意。不过,我怀疑 OP 实际上是在执行alert(number)
而不是 alert(parseFloat(number))
并且仅在需要减法时才使用 parseFloat
。
我很抱歉,我很傻。非常感谢!
@user3406280 - 没有什么愚蠢的。在我看来,这是 JavaScript 的一个缺陷。 (有Intl
对象--参见ECMAScript Internationalization API--支持以区域设置敏感的方式格式化数字,但没有其他方式。)【参考方案2】:
如果您将使用点而不是逗号(例如:71.13 而不是 71,13)一切都会按预期工作
【讨论】:
【参考方案3】:parseInt
和 parseFloat
采用提供的字符串中的第一个有效数字。
,
无效
parseFloat("17,77".replace(",","")); //1777
如果逗号用作分隔符,应该可以解决问题。
或者如果逗号被用作小数点
parseFloat("17,77".replace(",",".")); //17.77
在 MDN here中有解释
如果 parseInt 在 指定的基数,它会忽略它以及所有后续字符和 返回解析到该点的整数值。 parseInt 截断 数字到整数值。允许前导和尾随空格。
【讨论】:
【参考方案4】:您似乎需要使用这些标准来操作数字
小数点分隔符是“,”而不是“.”,例如 1,2345(一个点二三四五) 组分隔符是'.'而不是 ',' 像 1.000,1(一千个点)您可以使用 numeric.js 来满足此需求。
尝试去http://numeraljs.com/打开chrome dev,然后尝试用这些示例代码自己玩
// declare fr lang
numeral.language('fr',
delimiters:
thousands: ' ',
decimal: ','
,
abbreviations:
thousand: 'k',
million: 'm',
billion: 'b',
trillion: 't'
,
ordinal : function (number)
return number === 1 ? 'er' : 'ème';
,
currency:
symbol: '€'
);
numeral.language('fr'); // set fr lang
number = '88,9';
number2 = '17,77';
numberRaw = numeral().unformat(number); // convert string to number
numberRaw2 = numeral().unformat(number2); // convert string to number
resultRaw = numberRaw - numberRaw2; // calculate result
resultStr = numeral(resultRaw).format('0,0.00'); // format to string
console.log(resultStr); // print 71,13
【讨论】:
以上是关于Javascript parseFloat(number) - parseFloat(number2) 返回 int的主要内容,如果未能解决你的问题,请参考以下文章
Javascript parseFloat(number) - parseFloat(number2) 返回 int
JavaScript - parseFloat 强制 2 位小数作为 NUMBER
哪个javascript函数像parsefloat一样将语言环境作为参数?
JavaScript ParseFloat重新植入,显示小数限制