逗号Java后将小数四舍五入到5的下一个乘法

     2023-04-14     290

关键词:

【中文标题】逗号Java后将小数四舍五入到5的下一个乘法【英文标题】:Hot to round decimal to next multiplication of 5 after comma Java 【发布时间】:2018-02-22 06:30:36 【问题描述】:

我想得到最接近的十进制数。逗号后面的数字应该是 5 的乘积(逗号后面有 2 个数字),1-3 向下舍入为 0,4-6 舍入为 5,7-9 为 0,并向上舍入(递增)数字的左侧.如果是 0,也跳过第三个数字。

例如

4.985 -> 5.0

4.37 -> 4.4

2.14 -> 2.15

4.41 -> 4.4

5.29 -> 5.3

4.17 -> 4.2

2.07 -> 2.1

4.64 -> 4.65

5.21 -> 5.2

2.34 -> 2.35

我已经尝试过了,但在某些测试中出错了。

public static void main(String[ ] args) 
    double[] check = 4.985, 4.37, 2.14, 4.41, 5.29, 4.17, 2.07, 6.64, 5.21, 2.34, 4.89;
    double[] results = 5.0, 4.4, 2.15, 4.4, 5.3, 4.2, 2.1, 6.65, 5.2, 2.35, 4.9;
    for(int i=0; i<check.length; i++)
        double res = getClosestValue(check[i]);
        System.out.println(check[i]+" should be "+results[i]+" got "+res+" so it is "+
                        assertEquals(res, results[i]));
    


public static boolean assertEquals(double a, double b)
    return a==b;


public static double getClosestValue(double number) 
    String value = String.valueOf(number).substring(0, 4);
    int firstDigit = Character.getNumericValue(value.charAt(0));
    int secondDigit = Character.getNumericValue(value.charAt(2));
    int lastDigit = Character.getNumericValue(value.charAt(3));
    boolean secondChange = false;
    if (lastDigit <= 3) 
        lastDigit = 0;
     else if (lastDigit >= 7) 
        lastDigit = 0;
        secondDigit++;
        secondChange = true;
     else 
        lastDigit = 5;
    
    if(secondChange)
        if(secondDigit <= 3)
            secondDigit = 0;
         else if(secondDigit >= 7)
            secondDigit = 0;
            firstDigit++;
        
    
    String result = firstDigit + "." + secondDigit + (lastDigit != 0 ? lastDigit : "");
    return Double.parseDouble(result);

结果:

4.985 应该是 5.0 得到 5.0 所以这是真的 4.37 应该是 4.4 得到 4.4 所以这是真的 2.14 应该是 2.15 得到 2.15 所以这是真的 4.41 应该是 4.4 得到 4.4 所以这是真的 5.29 应该是 5.3 得到 5.0 所以它是 false 4.17 应该是 4.2 得到 4.0 所以它是 false 2.07 应该是 2.1 得到 2.0 所以它是 false 6.64 应该是 6.65 得到 6.65 所以这是真的 5.21 应该是 5.2 得到 5.2 所以这是真的 2.34 应该是 2.35 得到 2.35 所以这是真的 4.89 应该是 4.9 得到 5.0 所以它是 false

我的代码缺少什么?有没有更好的方法来获得这个?

编辑: 这与标记重复的不是重复的,我试图在逗号后舍入 2 个数字,而不仅仅是 1 个数字

【问题讨论】:

Double to int rounding normal way from .5的可能重复 似乎逻辑不符合您的要求。例如 5.29,最后一位是 9,然后将其更改为 0,并增加第二位变为 3,并设置标志。然后,由于设置了标志,检查第二个数字,即 3,将变为 0,得到结果 5。这正是你得到的,但与你的期望不符...... 所以当最后一位大于或等于 7,第二位小于 3 时,您的代码有问题。我检查了您的期望表。您可以简单地删除 seconddigit 是的,我认为这就是问题所在。但对于某些情况,如 4.98,它按应有的方式工作。我需要什么条件来解决这个问题? 【参考方案1】:

当最后一位大于或等于 7,第二位小于 3 时,您的代码有意外输出。我检查了您的期望表。

根据您的cmets,我认为您可以将相应的零件代码替换为以下代码:

if(secondChange)
    if (secondDigit == 10) 
        secondDigit = 0;
        firstDigit++;
     

【讨论】:

4.69 应该变成 4.7,但它变成了 5.0 我认为你需要更多的代码来确保输入的数字是你想要的格式——第一个是一个数字,然后是点,然后至少是两个数字。

四舍五入到 2 的下一个幂

】四舍五入到2的下一个幂【英文标题】:Roundinguptonextpowerof2【发布时间】:2010-10-0217:54:08【问题描述】:我想写一个函数来返回最接近的2的下一个幂。例如,如果我的输入是789,则输出应该是1024。有没有什么方法可以在不使用... 查看详情

将浮点数四舍五入到目标C中的下一个整数?

】将浮点数四舍五入到目标C中的下一个整数?【英文标题】:RoundafloatuptothenextintegerinobjectiveC?【发布时间】:2012-01-0215:01:32【问题描述】:如何将浮点数四舍五入到目标C中的下一个整数值?1.1->22.3->33.4->43.5->43.6->41.00... 查看详情

Spark Java 将数据帧中的每个值四舍五入到小数点后两位。

】SparkJava将数据帧中的每个值四舍五入到小数点后两位。【英文标题】:SparkJavaroundeachvalueindataframetotwodecimalplaces.【发布时间】:2017-06-0717:16:26【问题描述】:我在spark中有一个数据框,它有10列和100行。数据框中的每个单元格都... 查看详情

带小数和逗号的 PHP 回合 $1,000

...cle->prices[\'total_rental\'],2,\'.\',\',\')*0.50,2)?>我希望输出四舍五入到小数点后2位(货币/美元和美分)。当$vehicle 查看详情

如何在Java中将数字四舍五入到小数点后四位? [复制]

】如何在Java中将数字四舍五入到小数点后四位?[复制]【英文标题】:HowtoroundnumberstofourdecimalplaceinJava?[duplicate]【发布时间】:2016-05-0323:30:19【问题描述】:假设我有一个简单的浮点数数组[0.315023,1.0,0.12345,0121111]并称它为arr1。我... 查看详情

codeforces718aefimandstrangegrade

Codeforces718A题意:给一个小数,问最多取\(t\)次四舍五入到某一个小数点后的位后这个数最大能到多少。思路:首先肯定贪心。(但不知道为什么tag上是\(dp\)首先我们找到最靠左的一个大于等于5的数,把它四舍五入到上一位,然... 查看详情

java示例代码_四舍五入到小数点后一位

java示例代码_四舍五入到小数点后一位 查看详情

java编程有一个小数,如何去掉小数部分?

...()是天花板,即向上取整。floor是地板,向下取整。round是四舍五入。 参考技术B向上取整:Math.ceil()//只要有小数都+1向下取整:Math.floor()//不取小数四舍五入:Math.round()//四舍五入 参考技术C向上取整:Math.ceil()//只要有小数都+1向下取整... 查看详情

java编程:输出值要求格式化为:以逗号作为每千位的间隔符,并且小数点后四舍五入为两位。例如:123.45

有快速应用于所有类的方法吗?importjava.text.DecimalFormat;publicclassTestpublicstaticvoidmain(String[]args)doublepi=3.1415927;//圆周率//取一位整数System.out.println(newDecimalFormat("0").format(pi));//3//取一位整数和两位小数System.out.println(newDecimalForma... 查看详情

oracle保留小数问题

...总位数是p对s分2种情况:1.s>0精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。2.s<0精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s|123.2564NUMBER123.2... 查看详情

求和怎么四舍五入

...留到哪位,如果是保留到个位,就对小数点后的数字进行四舍五入,就是低于5,就舍去,超过5,就进一位。比如5.6,四舍五入,就是6,参考技术A用round函数C1=ROUND(A1+B1,1)【第一个参数是被四舍五入的数,第二个参数是保留的小... 查看详情

java四舍五入的函数

题目要求编写一个四舍五入的函数,要求可以保留到小数点后面的任意一位。参考技术A    java四舍五入的函数:Math.round  语法:  Math.round(x);  参数:  x为一数值。  解释:  方法。返回对参数x四舍五入后... 查看详情

怎样用java实现小数的四舍五入?

编程上四舍五入一般都是通过加一个小数看是否自动进1来完成的。打个比方12.563,要求保留两个小数,四舍五入,则可以这样做:第一步:12.563+0.005=12.568第二步:12.568*100=1256.8第三步:对1256.8强制转换为int类型(int)(1256.8)=1256第四... 查看详情

NSNumberFormatter 仅四舍五入到小数点后 3 位

】NSNumberFormatter仅四舍五入到小数点后3位【英文标题】:NSNumberFormatteronlyroundsto3decimalplaces【发布时间】:2009-05-0104:15:26【问题描述】:我正在尝试在iPhone应用程序中使用NSNumberFormatter将数字四舍五入到小数点后5位,但[formatterstri... 查看详情

java有一个小数,如何去掉小数部分?

...一个小数,如何去掉小数部分?1、Math.round(floatf)对小数部分四舍五入或者强值类型转换成int类型,直接去掉小数部分!2、3、向上取整:Math.ceil()//只要有小数都+1向下取整:Math.floor()//不取小数四舍五入:Math.round()//四舍五入参考技术AMa... 查看详情

bigdecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)(代码片段)

一、简介   Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来... 查看详情

java如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数

floata=123.2334f;floatb=(float)(Math.round(a*100))/100;(这里的100就是2位小数点,如果要其它位,如4位,这里两个100改成10000)参考技术A你好: float   a   =   123.2354f;    float   b  &... 查看详情

将小数分隔符从“,”(逗号)转换为“。” (点)例如“7,5”到“7.5”

】将小数分隔符从“,”(逗号)转换为“。”(点)例如“7,5”到“7.5”【英文标题】:Convertdecimalseparatorfrom\',\'(comma)to\'.\'(dot)e.g."7,5"to"7.5"【发布时间】:2014-03-2809:42:15【问题描述】:是的。我知道。这些是本... 查看详情