分类 JavaScript 下的文章

解决网上通传的2033年农历润月为7月的错误

开篇

农历的介绍不多说了,但是一直不是很了解,农历的日子是怎么算的。就很好奇,在某网站上看到算法,然后在研究的过程中,不经意见发现2033年的闰月错误。这里修改下。

很多地方都有引用那段js代码【万年历js】,网上还有很多人都引用了这个js,怕是因为2033年还没到,所以都没发现吧。【错误1 错误2

wangnianlidecuowu.jpg

解决方案

- 阅读剩余部分 -

chrome 谷歌翻译插件修改,支持超过250个字符的翻译

最近要经常用谷歌翻译,但是谷歌翻译有个让我蛋疼的地方,我选中一段文字后,不会弹出翻译的小图标,一次两次我还可以通过复制到translate.google.cn去翻译,但是很多次,就很麻烦了。

对于大段的文字,谷歌翻译不支持,那我只能自己动手修改了。

修改的过程其实就是跟js代码,最终找到是bubble_compiled.js,里面

- 阅读剩余部分 -

超长精度下前端如何正确回显

之前一篇文章《记一次超长数值精度错误问题》,有记录了下plsql显示值不对的问题。现在问题更大了。前端的json对象解析超长的数值后,居然不是安全数值(随机加减进位),比如我后台给前端传递99,999,999,999,999.99,之后会变成100,000,000,000,000.0。

几近无奈的寻找,终于功夫不负苦心人,我在github上找到一个大数运算的类:decimal.js

https://github.com/MikeMcl/decimal.js

特性如下:
整型,浮点型

快速,简单。

  • Integers and floats
  • Simple but full-featured API
  • Replicates many of the methods of JavaScript's Number.prototype and Math objects
  • Also handles hexadecimal, binary and octal values
  • Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal
  • No dependencies
  • Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only
  • Comprehensive documentation and test set
  • Includes a TypeScript declaration file: decimal.d.ts

使用方法:

x = new Decimal(123.4567)
y = new Decimal('123456.7e-3')
z = new Decimal(x)x.equals(y) && y.equals(z) && x.equals(z)        // true

引用decimal.js后哦,直接new即可。

下面是支持的方法列表

API

<html>
<head>
<title></title>
<script src='decimal.js'></script>
</head>
<body>
<div id="result">
</div>
<script>

var str1='9999999999999999.99';
var bigdecimal = new Decimal(str1);
var msg="<p>当前的数值字符串为:"+str1+"Decimal对象实例化后的toString值为:"+bigdecimal.toString()+"</p>";
//var z = new Decimal(x)
//x.equals(y) && y.equals(z) && x.equals(z)        // true
bigdecimal=bigdecimal.plus(1);
msg=msg+"<p>将值加1后为:"+bigdecimal.toString()+"</p>";
bigdecimal=bigdecimal.minus(1);
msg=msg+"<p>将值减1后为:"+bigdecimal.toString()+"</p>";
bigdecimal=bigdecimal.plus(0.1);
msg=msg+"<p>将值加0.1后为:"+bigdecimal.toString()+"</p>";
bigdecimal=bigdecimal.minus(0.1);
msg=msg+"<p>将值减0.1后为:"+bigdecimal.toString()+"</p>";
bigdecimal=bigdecimal.plus(0.01);
msg=msg+"<p>将值加0.01后为:"+bigdecimal.toString()+"</p>";
var bigdecimal1 = new Decimal("1");

for(var i=1;i<90;i++){
    bigdecimal1=bigdecimal1.mul(2);
    msg=msg+"<p>将值第"+i+"次乘2后为:"+bigdecimal1.toString()+"</p>";
}
document.getElementById("result").innerHTML=msg;

</script>
</body>

</html>