我正在使用javascript,但有些东西并不像我预期的那样工作。这是一行代码,类似于:
const val = parseInt(100/1000000000, 10);
我预计结果是0,但javascript的结果是1。但为什么呢?然后我尝试了一些类似的东西:
parseInt(0.000001, 10) // returns 0
parseInt(0.0000001, 10) // returns 1, I expect to have 0
如何使用这种代码获得预期结果?
parseInt
如果第一个参数还不是字符串,则将其强制为字符串。
像0.0001
这样的一些小值被强制为'0.0001'
。
但是像0.0000001
这样的非常小的值被强制为'1e-7'
。这应该会让问题变得非常明显:parseInt
只解析前导数字。
仅尝试对字符串执行parseInt
。如果您有一个数字,请使用不同的方法,如Math.round
或Math.ceil
。
parseInt
用于解析字符串中的整数。它将参数转换为字符串。在第一种情况下,"1e-7"
将转换为1
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt:
parseInt((函数解析字符串参数并返回整数
您正在寻找Math.round
。
正如Meagar所指出的,parseInt
将字符串转换为(整数(。如果你给它一些不是字符串的东西,比如布尔值或数字,你会得到奇怪的结果,因为你滥用了这个工具。
一个简单的解决方法是先将数字转换为字符串,然后得到预期的结果。例如。。。
parseInt('0.0000001', 10);
// 0