如果不对浮点执行任何算术运算,我是否会遇到任何浮点精度错误?我在程序中对数字进行的唯一操作仅限于以下内容:
- 从web服务中获取字符串形式的数字,并使用
parseFloat()
将其转换为浮点值 - 使用
<=
<
==
>
>=
比较结果浮点
示例:
const input = ['1000.69', '1001.04' /*, ... */]
const x = parseFloat(input[0])
const y = parseFloat(input[1])
console.log(x < y)
console.log(x > y)
console.log(x == y)
至于parseFloat()
的实现,我使用的是最新的Node.js.
浮动的来源是以美元为字符串的价格,通常为两位小数。
只要您的浮点值的来源是可靠的,您的检查是安全的,是的。解析后,我仍然会将它们四舍五入到一个可接受的十进制数字,只是为了100%安全。
正如MDN文档在其示例中所示
// these all return 3.14
parseFloat(3.14);
parseFloat('3.14');
parseFloat(' 3.14 ');
parseFloat('314e-2');
parseFloat('0.0314E+2');
parseFloat('3.14some non-digit characters');
parseFloat({ toString: function() { return "3.14" } });
//and of course
parseFloat('3.140000000') === 3.14
parseFloat
操作将字符串转换为其数值。说明书上写着:
在本规范中,短语"x的数值",其中x表示一个精确的实数(甚至可能是一个无理数,如π(意味着以以下方式选择的数值。考虑Number类型的所有有限值的集合,其中删除了-0,并添加了两个在Number类型中不可表示的附加值,即2ℝ1024ℝ(即+1ℝ×2ℝ53ℝ×2ℝ971ℝ)和-2ℝ1024ℝ(即-1ℝ×2ℝ53ℝ×2ℝ971ℝ).选择此集合中值最接近x的成员。
读起来就像两个相同的字符串总是转换为相同的最接近的数字。除了NaN,两个相同的数字是相等的。
6.1.6.1.13编号::等于(x,y(
如果x是NaN,则返回false。
如果y是NaN,则返回false。
如果x与y的数值相同,则返回true。
如果x是+0,y是-0,则返回true。
如果x是-0,y是+0,则返回true。
返回false。
emphasis mine