java数学计算工具类 double精确的加法算法 double精确的减法算法

本文详细介绍了Java中处理double类型精确加减乘除的方法,以及BigDecimal在保留小数位数、舍弃多余位和类型转换中的应用,着重讨论了如何在遇到浮点数精度问题时进行有效处理。
摘要由CSDN通过智能技术生成

java数学计算工具类
double精确的加法算法
double精确的减法算法
精确的乘法算法
对精确的除法运算,当发生除不尽的
保留小数、数值精度
在这里插入图片描述

精确的加法算法:2.27
精确的减法算法:0.01
精确的乘法算法:1.2882
相对精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位:1.0088495575
相对精确的除法运算,当发生除不尽的情况时,精确到小数点以后指定精度(scale),再往后的数字四舍五入:1.01
String/double/bigdecimal保留n位小数:1.24
bigDecimal保留n位小数:2.36
bigDecimal保留n位小数舍弃多余位数:2.35
bigDecimal转字符串:2.29999999999999982236431605997495353221893310546875
字符串转bigDecimal:2.33

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个Java工具类,基于余弦相似度方法计算两个字符串的相似度: ```java import java.util.HashMap; import java.util.Map; public class StringSimilarityUtil { /** * 计算两个字符串的余弦相似度 * * @param str1 字符串1 * @param str2 字符串2 * @return 余弦相似度 */ public static double cosineSimilarity(String str1, String str2) { // 分词 String[] words1 = str1.split(" "); String[] words2 = str2.split(" "); // 统计词频 Map<String, Integer> freq1 = new HashMap<>(); Map<String, Integer> freq2 = new HashMap<>(); for (String word : words1) { freq1.merge(word, 1, Integer::sum); } for (String word : words2) { freq2.merge(word, 1, Integer::sum); } // 计算向量长度 double length1 = 0; double length2 = 0; for (Map.Entry<String, Integer> entry : freq1.entrySet()) { length1 += Math.pow(entry.getValue(), 2); } for (Map.Entry<String, Integer> entry : freq2.entrySet()) { length2 += Math.pow(entry.getValue(), 2); } length1 = Math.sqrt(length1); length2 = Math.sqrt(length2); // 计算内积 double dotProduct = 0; for (Map.Entry<String, Integer> entry : freq1.entrySet()) { if (freq2.containsKey(entry.getKey())) { dotProduct += entry.getValue() * freq2.get(entry.getKey()); } } // 计算余弦相似度 return dotProduct / (length1 * length2); } } ``` 使用方法: ```java public static void main(String[] args) { String str1 = "Java是一种计算机编程语言"; String str2 = "Java是一种面向对象的编程语言"; double similarity = StringSimilarityUtil.cosineSimilarity(str1, str2); System.out.println(similarity); // 输出:0.6666666666666667 } ``` 其中,余弦相似度的计算公式为: $$ similarity = \frac{\sum_{i=1}^{n} A_i \times B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \times \sqrt{\sum_{i=1}^{n} B_i^2}} $$ 其中,$A_i$和$B_i$分别表示两个字符串中第$i$个词的频次,$n$为总词数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成年人的苦衷

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值