Java 为什么我的代码仍然在URI上显示错误的答案?

Java 为什么我的代码仍然在URI上显示错误的答案?,java,Java,所以,我一直在练习使用URI,因为我是一个初学者,我一直在做这些简单的问题,但通过这段代码,我认为我得到了正确的答案,但每当我试图提交它时,网站总是显示错误的答案 问题是这样的 读取小数点后两位的浮点值。这代表一种货币价值。在此之后,计算可分解价值的最小可能纸币和硬币数量。所考虑的票据为100、50、20、10、5、2。可能的硬币有1枚、0.50枚、0.25枚、0.10枚、0.05枚和0.01枚。打印消息“NOTAS:”后接纸币列表,消息“MOEDAS:”后接硬币列表 输入 输入文件包含浮点N(

所以,我一直在练习使用URI,因为我是一个初学者,我一直在做这些简单的问题,但通过这段代码,我认为我得到了正确的答案,但每当我试图提交它时,网站总是显示错误的答案

问题是这样的

读取小数点后两位的浮点值。这代表一种货币价值。在此之后,计算可分解价值的最小可能纸币和硬币数量。所考虑的票据为100、50、20、10、5、2。可能的硬币有1枚、0.50枚、0.25枚、0.10枚、0.05枚和0.01枚。打印消息“NOTAS:”后接纸币列表,消息“MOEDAS:”后接硬币列表

输入 输入文件包含浮点N(0)的值≤ N≤ 1000000.00)

输出 打印更改初始值所需的最小数量的纸币和硬币,如给定示例所示

输入样本
576.73

输出样本

NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01
这是密码

import java.io.IOException;
import java.util.Scanner;
import java.text.DecimalFormat;
import java.math.RoundingMode;
public class Main {
 private static DecimalFormat df=new DecimalFormat("0.00");
    public static void main(String[] args) throws IOException 
    {
        double a;
        int b[]={100,50,20,10,5,2};
        double c[]={1,0.5,0.25,0.1,0.05,0.01};
        int i,d;
        Scanner sc= new Scanner(System.in);
        a=sc.nextDouble();
        System.out.println("NOTAS:");
        for(i=0;i<6;i++)
        {
            d=(int)(a/b[i]);
            System.out.println(d+" nota(s) de R$ "+df.format(b[i]));
            a=a%b[i];
        }
        System.out.println("MOEDAS:");
        for(i=0;i<6;i++)
        {
            int e=(int)(a/c[i]);
            System.out.println(e+" moeda(s) de R$ "+df.format(c[i]));
            a=a%c[i];
        }
    }
}
import java.io.IOException;
导入java.util.Scanner;
导入java.text.DecimalFormat;
导入java.math.RoundingMode;
公共班机{
私有静态DecimalFormat df=新的DecimalFormat(“0.00”);
公共静态void main(字符串[]args)引发IOException
{
双a;
int b[]={100,50,20,10,5,2};
双c[]={1,0.5,0.25,0.1,0.05,0.01};
int i,d;
扫描仪sc=新的扫描仪(System.in);
a=sc.nextDouble();
System.out.println(“NOTAS:”);

对于(i=0;iOk),我发现的问题是-

双精度模运算结果可能会使最终结果变差。例如,
0.73%0.50=0.22999999998
,我原本预计为0.23

可能的解决方案-

修正那些奇怪的模替换下面的行-

这将
0.22999…
thing值舍入为
0.23


您可以通过在
0.73
案例前后更改上述代码语句来确认不同的结果。您会发现,在
2 moeda(s)de R$0.01之前的版本与在
3 moeda(s)正确的
3之后的版本相比de R$0.01

预期的输出是什么?我包括了整个问题。它也显示了预期的输出。我得到的输出与预期的输出相同,但问题是网站仍然错误地显示它submission@Codered嗯,也许还有其他问题。我解决了我能找到的。你能分享其他东西吗,比如n错误或什么,失败的测试用例?否则,我唯一的怀疑是它不适合一些奇怪的测试用例,输出格式不正确,整数或双溢出。你能提供问题的链接吗?谢谢。谢谢兄弟,我再次尝试,发现问题就是你之前提到的。欢迎兄弟。很抱歉,我几乎忘记了work'n的内容,并且没有创建帐户并尝试为自己提交,但很高兴听到您的问题在@Codered解决了
a=a%c[i];
a=Double.parseDouble(df.format(a%c[i]));