gus*_*olo 24 javascript decimal multiplying
我在Javascript中有以下代码:
var m1 = 2232.00;
var percent = (10/100);
var total = percent*m1;
alert(total);
Run Code Online (Sandbox Code Playgroud)
问题是变量"total"给了我"223.20000000000002",它应该是"223.2",我该怎么做才能得到正确的值?
Mal*_*lil 20
.toFixed()是最好的解决方案.点后只保留两位数.
实验1:
var value = 3.666;
value.toFixed(2); //Output : 3.67
Run Code Online (Sandbox Code Playgroud)
实验2:
var value = 3.0000;
value.toFixed(2); //Output : 3.00
Run Code Online (Sandbox Code Playgroud)
你无法得到确切的价值.这是浮点数的基本问题.
您可以强制使用固定数量的十进制数toFixed:
alert(total.toFixed(2));
Run Code Online (Sandbox Code Playgroud)
但是,请记住,这将留下您可能不想要的尾随零.您可以删除它们.replace(/0+$/,'');
如果您尝试显示此数字,您可以使用toFixed(1)转换为字符串。如果您这样做,请跟踪类型,因为您无法将字符串与另一个数字相乘。
如果您打算在另一个计算中使用它,您可以将其截断到一位小数:
Math.round( total * 10 ) / 10
Run Code Online (Sandbox Code Playgroud)
然而,正如许多人所指出的,不精确的值就是浮点数的方式。
请参阅评论中链接的问题以获取更多好的信息。
运算符“*”和“/”并不总是完美工作,例如:
\n\n32.09 * 100 = 3209.0000000000005\n100 / (1 / 32.09) = 3209.0000000000005\nRun Code Online (Sandbox Code Playgroud)\n\n解决方案:
\n\n一种解决方案(最简单的解决方案)是使用 .toFixed(2) ,其中“2”是您想要的小数位数。但你必须考虑到这会返回一个字符串,并且它会四舍五入该值。
\n\n45.6789.toFixed(2) \xe2\x80\x94> "45.68" as String\nRun Code Online (Sandbox Code Playgroud)\n\n其他最完整的选项是使用 .toLocaleString 将数字正确转换为您想要的国家/地区代码。您可以设置一对参数来将小数值始终固定为 2。这还会返回一个字符串:
\n\n(654.3453).toLocaleString(\n \'en-US\',\n {minimumFractionDigits: 2, maximumFractionDigits: 2},\n) \xe2\x80\x94> "654.35" as String\nRun Code Online (Sandbox Code Playgroud)\n\n如果您需要它作为数字,您可以将其包装到 Number( ... ) 中:
\n\nNumber((654.3453).toLocaleString(\n \'en-US\',\n {minimumFractionDigits: 2, maximumFractionDigits: 2},\n)) \xe2\x80\x94> 654.35 as Number\nRun Code Online (Sandbox Code Playgroud)\n\n如果您只想要一个无小数的数字,请使用其中一种方法来确保结果不带小数。
\n\nMath.trunc(32.09); \xe2\x80\x94> 32 as Number \n(32.09).toFixed(0); \xe2\x80\x94> \xe2\x80\x9c32\xe2\x80\x9d as String\n32.09 | 0; \xe2\x80\x94> 32 as Number\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
49520 次 |
| 最近记录: |