浮点数字-无算术运算和精度错误



如果不对浮点执行任何算术运算,我是否会遇到任何浮点精度错误?我在程序中对数字进行的唯一操作仅限于以下内容:

  1. 从web服务中获取字符串形式的数字,并使用parseFloat()将其转换为浮点值
  2. 使用<=<==>>=比较结果浮点

示例:

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

最新更新