java中小数怎么四舍五入?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中小数怎么四舍五入?相关的知识,希望对你有一定的参考价值。
有数字类型的字符串,需要做四舍五入,但是没法确定保留几位小数,怎么办?
比如0.19999999999996应该处理成0.2
或者2.45800000000003应该处理成2.458
或者0.00000999999997应该处理成0.00001
按照你的要求为不确定保留几位小数的字符串做四舍五入的Java程序如下
import java.math.BigDecimal;
public class A
public static void main(String[] args)
String s="0.00000999999997";
//四舍五入,length是小数位数
int length=s.substring(s.indexOf(".")+1).length();
String s1=String.format("%."+(length-1)+"f",new BigDecimal(s));
//去尾部0
BigDecimal bd=new BigDecimal(s1).stripTrailingZeros();
System.out.println(bd.toPlainString());
追问
谢谢,但是还有种情况我忘了说,有些正常的小数,比如1.53 ,或者0.1之类的,如果用这个程序来处理的话就变成了1.5和0,和期望的结果不一样
追答我定义了一个判断是正常小数还是不正常小数的标准,
末尾超过6位数为9或0的小数需要四舍五入,其它的不变.
修改后的Java程序见图(因为字数限制无法贴代码)
java中如果精确一点的小数位比较多,类型建议使用BigDecimal,数据库存储用decimal类型。
.你的问题是想做四舍五入,并指定精确小数位数。BigDecimal..setScale(需要精确的小数位数例如:3, BigDecimal.ROUND_HALF_UP); 如图所示:如果想要确定小数位数,可以用正则取出需要精确的位数,再去传输需要精确的小数位数。
NumberFormat是Format类的子类,用于国际化格式输出,DecimalFormat是NumberFormat的子类。
对于小数点后位数控制的用法。
NumberFormat
public static void main(String[] arg)
double a = 2222.345;
//int b = Math.round(a);
//System.out.println(b);
NumberFormat nf= NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
String c = nf.format(a);
System.out.println(c);//输出结果为2222.35.
DecimalFormat
public static void main(String[] arg)
double a = 2222.345;
//int b = Math.round(a);
//System.out.println(b);
DecimalFormat df = new DecimalFormat("#.00");
String d = df.format(a);
System.out.println(d);//输出结果为2222.35
但是如果定义DecimalFormat df = new DecimalFormait("#.000000"),则小数点后数字会进行补位,结果为2222.345000。而nf.setMaximu,FractionDigits(6)则小数点后数位不会进行补位。 参考技术C 您好,java中小数计算可以使用Math函数来计算,可以对数字进行四舍五入 参考技术D 有float类型的 向上取整:Math.ceil() //只要有小数都+1 向下取整:Math.floor() //不取小数 四舍五入:Math.round() //四舍五入
Python中小数四舍五入的处理
由于使用round模块导致小数四舍五入精度不准确,于是自己写了一个四舍五入的方法,方便今后工作中参考!
""""""""""""""""""""""""""""
# -*- coding: utf-8 -*-
# @Time : 2019/12/27 18:09
# @Author : Treasure丶
# @Site :
# @File : demo2.py
# @Software: PyCharm Community Edition
"""""""""""""""""""""""""""""
class rounded(object):
def rounded_Four_Five(self, num, digits):
"""
小数点四舍五入的方法
:param num: 指定的四舍五入的小数
:param digits: 指定保留的位数
:return: 四舍五入后的数字
"""
# 首先判断传入的参数类型是否为浮点型
if isinstance(num, float) == False:
return "该数值类型不为浮点型,无法操作!"
else:
value = str(num)
len_num = len(value) # 获取总长度
index_point = value.find(‘.‘) # 获取小数点索引
if len_num - (index_point + 1) < digits:
return "保留位数入参大于小数位数,无法操作!"
else:
if num > 0:
if int(value[index_point + digits + 1]) >= 5: # 是否入五
num = float(num) + float(str("0.{}1".format(‘0‘ * (digits - 1)))) # 在指定的位数上面+1(这里要考虑数值相加进位的问题)
return float(str(num)[:index_point + digits + 1])
else: # 否则舍四
return float(str(num)[:index_point + digits + 1])
elif num < 0: # 如果是负数
abs_num = str(abs(num)) # 获取绝对值
index_point = abs_num.find(‘.‘) # 需要从绝对值中获取小数点索引位置
if int(abs_num[index_point + digits + 1]) >= 5: # 是否入五
abs_num = float(abs_num) + float(
str("0.{}1".format(‘0‘ * (digits - 1)))) # 在指定的位数上面+1(这里要考虑数值相加进位的问题)
return float(‘-‘ + str(abs_num)[:index_point + digits + 1])
else: # 否则舍四
return float(‘-‘ + str(abs_num)[:index_point + digits + 1])
if __name__ == ‘__main__‘:
d = rounded().rounded_Four_Five(2323.956879089786, 9)
print(d)
以上是关于java中小数怎么四舍五入?的主要内容,如果未能解决你的问题,请参考以下文章