最近在做一个前端计算器
关于 js 精度,网上教程大部分都是把小数处理成整数
然而
4246.77 * 100 = 4336.820000000001

请问一下大家一般怎么处理
最近在做一个前端计算器
关于 js 精度,网上教程大部分都是把小数处理成整数
然而
4246.77 * 100 = 4336.820000000001

请问一下大家一般怎么处理
|
chairuosenNov 24, 2017
1
把字符串里的点删了直接转 Number,然后通过点右边的长度判断倍数?
|
|
domtyNov 24, 2017
2
看你保留几位小数了呗
比如保留两位小数就 乘 100 取整再除 100 |
|
5
(123.123456).toFixed(3)
|
|
6
1) 4246.77 * 100 = 424677.00000000006
2) 小数处理成整数指的是 4246.77 表示成 424677 * 10^-2 而不是去计算 4246.77 * 100 因为前者本身就无法用 ISO754 浮点数精确表示。 3) 此类问题应该使用高精度算法解决 |
|
7
|
|
hubert3Nov 24, 2017
8
chrome 显示 4246.77 * 100 = 424677.00000000006
|
|
yangehappyNov 24, 2017
9
说一下场景吧
|
|
11
math.js ,不要自己硬写
|
|
gytengNov 24, 2017
12
注意 toFixed 也是有坑的
|
|
13
|
|
mooncakejsNov 24, 2017
14
说的好像别的语言没这个问题一样。
|
|
15
@mooncakejs 别的没这么酷炫,至少*100 基本没问题的。最近我也是前后端都搞。。
谢谢大家 不一一回复了 |
|
mooncakejsNov 24, 2017
16
@wslsq 常见的后端语言 c/c++,python,java 都这样,只不过 js 在前端更容易被注意到。
|
|
alenNov 24, 2017
17
<img alt="" src="
"> |
|
hasbugNov 24, 2017
18
网上找别人的轮子来用。。我都这么解决,给力不
|
|
lybtongjiNov 24, 2017
19
Firefox 显示正常
|
|
ElvenNov 24, 2017 via iPhone
20
用现成的库呀,比如 math.js ,bn.js 什么的
|
|
moe3000Nov 24, 2017
21
toFixed 或者别人写的运算库
|
|
zprooNov 24, 2017
23
|
|
rover5056Nov 24, 2017
24
(*1000 +0.001)/1000
自己想的办法 有点妖但是很好用 |
|
rover5056Nov 24, 2017
25
再 FIX 一下就好了
|
|
26
大多数语言都会有的问题,本质就是浮点数小数部分转成二进制会无限循环,再转换回来的时候丢失精度
|