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

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

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