java - 在java中四舍五入并计算小数点后有多少个数字

标签 java algorithm double rounding

我一直在尝试编写一个程序来在小数点后四舍五入 - 例如 4.45 将变成 4.50 和 3.23-3.20 等等。 为此,我试图计算小数点后有多少个数字,然后将其乘以 10 乘以我找到的那个数字,相应地加上或减去使其作为一个整体整数——例如 4.45 将首先变成 445,然后是 450,然后我再除以我找到的那个数字,所以我最终会得到 4.50。 我在技术上所做的工作,唯一的问题是计算小数点后的位数。例如,我输入 20.13 作为我的 double ,我尝试将它乘以 10 直到它等于它是 int-like 如果 201.3==201 否则我继续乘以 10。唯一的问题是它在调试中破坏了我的数字我看到它变成了 20.13 到201.299999998 而不是 201.3,这使我的循环基本上是无限的,完全违背了目的。
我的功能:

//input : The function gets a double number
//output : The function returns how many numbers are after the decimal point
public static int countDecimal(double num){
    int count=0;
    while(num!=(int)num){
        num*=10;
        count++;
    }
    return count;
}

有谁知道它为什么这样做以及我如何实现我的目的?我也很想知道您是否知道将 4.45 舍入到 4.5 的更简单方法,因为我的方法需要许多其他函数,而且对于一些相当基本的东西来说相当长。我看到的 java 函数只舍入到整数 - 例如 4.5 到 5。

最佳答案

这是一个非常粗略的答案,但思路就在那里。

最好的办法是将您的数字转换为字符串

String numToString = String.valueOf(num);

找到小数点的索引并删除其中的任何 >2

int decimalIndex = numToString.indexOf(".");
numToString = numToString.substring(decimalIndex, decimalIndex + 2);

最后取你的最后一个数字并相应地向上或向下舍入。

关于java - 在java中四舍五入并计算小数点后有多少个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48997575/

相关文章:

java - Android SDK,检查设备是否为 Amazon-FireTV

algorithm - BeechickSort 算法比快速排序更好?

python - 浮点运算错误

swift - 为什么在达到 Double Max 之前 Double 达到 `Double.infinity`?

java - string.format 自动填充我的 double 如何让它停止

java - ExtJs Combobox 显示字段编码

HashMap 中的 Java Map 请求属性

java - Hibernate:找不到映射异常

java - 在不使用任何外部函数的情况下生成随机数

javascript - 循环匹配定位算法