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

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