复盘231126基于ruoyi项目开发使用小白技术点回顾

117 阅读3分钟

js获取小数位数

juejin.cn/s/js%E8%8E%…

  • 字符串形式获取

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() 列表去重示例

blog.csdn.net/haiyoung/ar…

Java 8 Stream.distinct() 示例 在这篇文章里,我们将提供Java8 Stream distinct()示例。 distinct()返回由该流的不同元素组成的流。distinct()是Stream接口的方法。

distinct()使用hashCode()和equals()方法来获取不同的元素。因此,我们的类必须实现hashCode()和equals()方法。如果distinct()正在处理有序流,那么对于重复元素,将保留以遭遇顺序首先出现的元素,并且以这种方式选择不同元素是稳定的。在无序流的情况下,不同元素的选择不一定是稳定的,是可以改变的。distinct()执行有状态的中间操作。在有序流的并行流的情况下,保持distinct()的稳定性是需要很高的代价的,因为它需要大量的缓冲开销。如果我们不需要保持遭遇顺序的一致性,那么我们应该可以使用通过BaseStream.unordered()方法实现的无序流。

image.png

js中关于金融数据计算

  • js 中经常需要对金额之类的数据进行校验计算 ,以便计算出来的结果与后端(如java) 计算出来的结果一致。最简单的办法是使用类似BigDecimal类的js库来进行快速高速的实现。

  • js 库的使用尽可能与java中的使用方法类以 ,且功能强大文档全。

在比较了几份后, 最终选择了 - decimal.min.js

以下为对应的cdn 地址

image.png


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

表格表头增加提示

image.png