Skip to content

0.1 + 0.2 == 0.3 ? #30

Description

@fwon

JavaScript采用的是IEEE 754规范的二进制浮点数计算方法,由于精度问题。导致0.1+0.2不等于0.3。

解决办法:设置一个误差范围值,通常称为"机器精度",对JavaScript的数字来说,这个值通常是2^-52

在ES6中,该精度值定义在Number.EPSILON中。

if (!Number.EPSILON) {
	Number.EPSILON = Math.pow(2, -52);
}

function numbersCloseEnoughToEqual(n1, n2) {
	return Math.abs(n1 - n2) < Number.EPSILON;
}

var a = 0.1 + 0.2;
var b = 0.3;

numbersCloseEnoughToEqual(a, b); //true
numbersCloseEnoughToEqual(0.0000001, 0.0000002); //false

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions