最近有个需求是对一个double值,保留3位小数,如果整数位为零,则小数点后保留3个有效值。
下面是实现代码,如果有更好的办法,请告诉我,谢谢!
private static final int DEFAULT_SCALE = 3;//默认保留三位
private static final int MAX_SCALE = 9;//最大保留9位
private static final String INTEGER_BIT_NOT_ZERO = "(0([.](0+|[0-9]{1,3}))?)|(-?[1-9][0-9]*([.][0-9]+)?)";//不包括整数位为0,小数位超过三位的正则
private static final String INTEGER_BIT_IS_ZERO = "0[.]0*[1-9][0-9]{0,2}";//获取需要保留小数位的精度的正则
private double formatNumber(double value)
{
BigDecimal bigDecimal = BigDecimal.valueOf(value);
int scale = DEFAULT_SCALE;
if (!bigDecimal.toString().matches(INTEGER_BIT_NOT_ZERO))
{
Matcher matcher = Pattern.compile(INTEGER_BIT_IS_ZERO).matcher(
bigDecimal.toString());
if (matcher.find())
{
scale = matcher.group().length() - 2;
}
else
{
scale = MAX_SCALE;//因为如果是科学计数的形式,这儿会匹配不成功,所以给个默认的精度
}
}
return bigDecimal.setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
分享到:
相关推荐
在Java中使用正则表达式来判断字符串是否符合整数、小数或实数的格式是一种常见且有效的做法。在编程中,我们经常需要对输入的字符串进行格式验证,以确保它们符合预期的数值格式,尤其是在处理财务数据、用户输入...
在JAVA编程中,处理数值运算是一项...通过理解并灵活运用这些方法,我们可以有效地解决大数值的取整、取小数、保留小数位以及计算自幂数等问题。在实际编程中,应根据具体需求选择合适的方法,确保代码的效率和可读性。
在这个代码示例中,`numToChinese`函数接收一个整数,然后通过计算每个数位上的数字并结合单位映射表生成中文读法。`simplify`函数用于删除不必要的“零”字符,以确保输出的中文读法简洁正确。`isZeroUnit`函数用来...
通过理解代码中的随机数生成、避免重复数字以及条件输出机制,开发者可以更好地掌握Java中的随机数处理技巧,为实际应用提供有力支持。然而,也应注意,如上所述的避免重复数字的方法可能在大数据量下效率较低,未来...
在Java中,我们可以使用循环或递归的方式来实现求解任意正整数的阶乘。本篇文章将详细探讨如何用Java来计算阶乘。 首先,我们需要理解阶乘的概念。阶乘是一个正整数n与小于它的所有正整数的乘积,表示为n!。例如,5...
3. **排序并输出结果:** 使用Java中的排序算法(例如冒泡排序或使用`Arrays.sort`配合自定义比较器)对输入的整数数组进行排序,然后按顺序拼接所有数字形成最终结果。 #### 2. Java编程实现 **关键代码分析:** ...
在这个方法中,首先尝试将文本框中的字符串转换为整数,然后分别计算并显示百位、十位和个位上的数字。如果输入的不是有效的整数,则会捕获 `NumberFormatException` 异常,并通过对话框提示用户输入错误。 ##### 3...
根据给定的信息,本文将详细解释一个Java程序的设计与...综上所述,该Java程序提供了一种简洁有效的方法来将数字字符串转换为英文表示。通过合理利用不同的方法来处理不同位数的数字,程序能够灵活地应对各种输入情况。
在Java编程语言中,求解一个整数的位数及各位数字之和是一个常见的问题,尤其是在数字处理和算法设计方面。这个任务可以通过多种方法来实现,包括基础的数学操作和字符串处理。以下将详细介绍如何完成这个任务。 ...
在给定的场景中,我们需要处理三种类型的数字:整数、带有小数点的数字以及负数,并且需要确保输入是有效的数字字符串。 首先,我们需要了解`DecimalFormat`类。它是`java.text`包下的一个类,主要用于格式化十进制...
为了计算一个整数各个位上的数字之和,我们需要采用一种策略,即不断地对这个整数进行除以10的操作,并取其余数,直到该整数变为0。具体步骤如下: 1. **初始化变量**:首先,我们设定一个变量`sum`用于存储各个位...
在Java编程中,实现n位数字的全排列是一项常见的算法问题。全排列是指从n个不同元素中取出n个元素,按照一定顺序排列的所有可能的组合。每一种排列都是唯一的,且总数为n的阶乘(n!)。这个问题通常通过递归的方式来...
然而,在这个上下文中,特征值可能是指更广泛的数学或编程概念,如数字的质因数分解、模运算性质、位操作、数字的统计特性(如平均值、中位数、众数)或其他自定义计算。 在Java中,我们可以通过多种方式求取数字...
整数划分问题的定义是:给定一个非负整数n,寻找所有可能的方式将其拆分为若干个正整数的和,这些正整数称为划分的“部分”。例如,当n=4时,有效的划分有{4}、{3,1}、{2,2}、{2,1,1}和{1,1,1,1}。 在Java中解决这...
这个过程通常涉及到对数字每一位的处理,包括个、十、百、千、万、亿等单位,以及零、壹、贰、叁、肆、伍、陆、柒、捌、玖等数字的对应。 例如,一个简单的转换函数可能会这样设计: ```java public String ...
水仙花数是一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如,153是一个3位的水仙花数,因为1^3 + 5^3 + 3^3 = 153。 对于21位的水仙花数而言,它需要满足以下条件:所有位上的数字的21次幂...
Java中的位操作是一种底层的、高效的编程技巧,它允许我们直接对二进制位进行操作。位操作在处理数据、优化代码性能等方面有着广泛的应用,尤其是在处理二进制流、节省内存资源或进行高效计算时。本文将深入探讨Java...
在《JAVA程序设计实用教程(第3版)》中,习题02.02主要关注的是计算三位数的数字和。这个练习旨在帮助学习者深入理解Java编程基础,特别是涉及整数处理、循环结构以及基本算法设计。下面将详细阐述相关知识点。 1....
- `keyNumDown(obj, count1, count2)`:主要函数,用于限制用户输入特定格式的数字(整数部分最多`count1`位,小数部分最多`count2`位)。 3. **代码逻辑分析** - **获取光标位置**:`getPosition`函数根据...
在Java编程中,生成十个不重复的随机数是一项常见的任务,尤其在进行数据模拟、测试或者游戏设计等场景。要实现这个功能,我们需要利用到Java的集合框架和Math类中的随机数生成方法。下面我们将详细讲解如何实现这个...