javascript计算浮点数精确计算,代码如下:
- function accAdd(arg1, arg2) {
- var r1, r2, m, c;
- try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
- try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
- c = Math.abs(r1 - r2);
- m = Math.pow(10, Math.max(r1, r2))
- if (c > 0) {
- var cm = Math.pow(10, c);
- if (r1 > r2) {
- arg1 = Number(arg1.toString().replace(".", ""));
- arg2 = Number(arg2.toString().replace(".", "")) * cm;
- }
- else {
- arg1 = Number(arg1.toString().replace(".", "")) * cm;
- arg2 = Number(arg2.toString().replace(".", ""));
- }
- }
- else {
- arg1 = Number(arg1.toString().replace(".", ""));
- arg2 = Number(arg2.toString().replace(".", ""));
- }
- return (arg1 + arg2) / m;
- }
java浮点数精确计算,使用java.math.BigDecimal,测试代码如下:
- package test;
- import java.math.BigDecimal;
- public class Test {
- public static void main(String[] args) {
- Double d1=0.0333D;
- Double d2=0.0333D;
- Double d3=0.0333D;
- System.out.println(String.valueOf(d1+d2+d3));
- BigDecimal b1 = new BigDecimal("0.0333");
- BigDecimal b2 = new BigDecimal("0.0333");
- BigDecimal b3 = new BigDecimal("0.0333");
- System.out.println(b1.add(b2).add(b3).doubleValue());
- System.out.println(b1.doubleValue());
- BigDecimal bd = new BigDecimal(0);
- String[] str = {"0.0333","0.0333","0.0333"};
- for(String s : str)
- {
- bd = bd.add(new BigDecimal(s));
- }
- System.out.println(bd.doubleValue());
- }
- }