js获取小数位数
- 字符串形式获取
let num = 3.14159;
let numStr = num.toString();
let arr = numStr.split(".");
let decimalCount = arr[1].length;
console.log(decimalCount); // 输出5
- number形式获取
let num = 3.14159;
let decimalCount = num.toFixed(0).slice(-1);
console.log(decimalCount); // 输出5
Java 8 Stream.distinct() 列表去重示例
Java 8 Stream.distinct() 示例 在这篇文章里,我们将提供Java8 Stream distinct()示例。 distinct()返回由该流的不同元素组成的流。distinct()是Stream接口的方法。
distinct()使用hashCode()和equals()方法来获取不同的元素。因此,我们的类必须实现hashCode()和equals()方法。如果distinct()正在处理有序流,那么对于重复元素,将保留以遭遇顺序首先出现的元素,并且以这种方式选择不同元素是稳定的。在无序流的情况下,不同元素的选择不一定是稳定的,是可以改变的。distinct()执行有状态的中间操作。在有序流的并行流的情况下,保持distinct()的稳定性是需要很高的代价的,因为它需要大量的缓冲开销。如果我们不需要保持遭遇顺序的一致性,那么我们应该可以使用通过BaseStream.unordered()方法实现的无序流。
js中关于金融数据计算
-
js 中经常需要对金额之类的数据进行校验计算 ,以便计算出来的结果与后端(如java) 计算出来的结果一致。最简单的办法是使用类似BigDecimal类的js库来进行快速高速的实现。
-
js 库的使用尽可能与java中的使用方法类以 ,且功能强大文档全。
在比较了几份后, 最终选择了 - decimal.min.js
以下为对应的cdn 地址
- cdnjs.cloudflare.com/ajax/libs/d…
- cdnjs.cloudflare.com/ajax/libs/d…
- cdnjs.cloudflare.com/ajax/libs/d…
-
github: github.com/MikeMcl/dec…
-
支持强大的链式写法
new Decimal(row.faceValue).mul(row.discount).div(100).toFixed(3,Decimal.ROUND_DOWN);
-- 只需要有一个Decimal来进行后, 后面都会自动进行转换
let discount = new Decimal(price).div(faceValue).mul(100).toFixed(3, Decimal.ROUND_DOWN);
// 根据面值和价格计算折扣
/**
* 对 由售价-->折扣时,反计算有些偏差的情况:处进行微调折扣, 以实现折扣---> 售价与 写动输扩的售价一致。
* 如面值: 12 , 售价10.986 ---> 折扣为91.550 但 91.550*12=10.985 微调
* @type {number}
*/
for (let i = 1; i < 5; i++) {
let sss = new Decimal(faceValue).mul(discount).div(100).toFixed(3, Decimal.ROUND_DOWN);
if (0 == new Decimal(sss).comparedTo(price)) {
$('#effectiveDiscount').val(discount);
} else {
$.modal.alert("正在" + i + "次微调折扣: 计算价=" + sss + " ; 售价=" + price + " ;折扣=" + discount)
discount = new Decimal(discount).add(0.001);
}
}
- 关于保存几位小数相关
//查看有几位小数 (注意不计算 小数点 最后 末尾 的 0)
y = new Decimal(987000.000)
y.sd() // '3' 有效位数
y.sd(true) // '6' 总共位数
// 保留 多少个位数 (小数位 会补0)
x = 45.6
x.toPrecision(5) // '45.600'
// 保留 多少位有效位数(小数位 不会补0,是计算的有效位数)
x = new Decimal(9876.5)
x.toSignificantDigits(6) // '9876.5' 不会补0 只是针对有效位数
// 保留几位小数 , 跟 js 中的 number 一样
toFixed
x = 3.456
// 向下取整
x.toFixed(2, Decimal.ROUND_DOWN) // '3.45' (舍入模式 向上0 向下1 四舍五入 4,7)
// 向上取整
Decimal.ROUND_UP
//四舍五入
ROUND_HALF_UP
- 一份小小的入门手册 www.jianshu.com/p/429637a1c…
- 小数点舍入模式 blog.csdn.net/well386/art…