相关疑难解决方法(0)

AS400/RPG 中的舍入与 Java 中的舍入

我正在尝试将一些AS400/RPG代码转换为Java.

我能够在网上找到一个示例,该示例反映了我在代码中看到的内容:

d elevensix       s             11  6 inz(26285.88991)  
d seventwo        s              7  2                   
c                   eval(h)   seventwo      = elevensix 
c                   eval      *inlr = *on
Run Code Online (Sandbox Code Playgroud)

我已经编写了代码,Java我发现我在RPG代码中看到的舍入结果与我在Java. 这是我正在做的舍入示例Java

private Long roundAmount(Double amount) {
        return Math.round(amount);
}
Run Code Online (Sandbox Code Playgroud)

在实践中,我的代码生成的结果与代码的结果相匹配,RPG但是我发现了逻辑不一致的示例;有些按预期四舍五入,而另一些则没有。

我曾大量使用 Java;这是我第一次涉足RPG。老实说,我什至不确定从哪里开始。例如,在RPG上面的代码中;它究竟是如何工作的?我看到操作的结果被放入一个标有 2 个小数位的变量中;四舍五入是隐含的吗?在线搜索我发现以下关于 Java 如何处理舍入的定义

Java 中的 Math.round() 方法用于将数字四舍五入到它的? 最接近的整数。这是通过将 1/2 加到数字上,取结果的下限,并将结果转换为整数数据类型来完成的。

老实说,这是清晰而简洁的。我还没有找到关于它如何工作的类似解释RPG;需要明确的是,这是在使用 的 AS400 …

java rpg ibm-midrange

2
推荐指数
1
解决办法
535
查看次数

描述Number的最准确的Java类型是什么

假设性能不是问题,并且知道我只需要使用类,因为我有我的程序所有的数字,这类型将是一个正确使用?我认为这BigDecimal可能是最好的选择,但我不确定.

java types numbers

1
推荐指数
1
解决办法
160
查看次数

如何提高Java计算的准确性

在某些情况下,我需要在Java中进行非常精确的计算,但它总是会出现一些意外错误.如何避免它们或将错误保持在可接受的范围内?

例如

public static void main(String[] args) throws Exception {
    double x = 0.0;
    while (x <= 1.0){
        System.out.println(x);
        x += 0.1;
        System.out.println("add 0.1");
    }
}



- the result will be 

   0.0 add 0.1
   0.1 add 0.1
   0.2 add 0.1
   0.30000000000000004 add 0.1
   0.4 add 0.1
   0.5 add 0.1
   0.6 add 0.1
   0.7 add 0.1
   0.7999999999999999 add 0.1
   0.8999999999999999 add 0.1
   0.9999999999999999 add 0.1
Run Code Online (Sandbox Code Playgroud)

这不是预期的.

提前致谢

java

1
推荐指数
1
解决办法
691
查看次数

如何在Java中将BigDecimal转换为浮点数为2的小数

如何将BigDecimal转换为float,在Java中为2个小数?

BigDecimal x=new BigDecimal(any exponential term);
Run Code Online (Sandbox Code Playgroud)

现在,我想转换为仅具有2个小数点的浮点数,例如-0.45。

java bigdecimal java-8

1
推荐指数
2
解决办法
4118
查看次数

Java中这些等效的C数据类型是什么?

说我有很多数字.我知道在C中我们可以声明:

long long int // What is equivalent of this in Java?

long double   // and this?
Run Code Online (Sandbox Code Playgroud)

谢谢.

c java types bits biginteger

0
推荐指数
1
解决办法
592
查看次数

java中的double 0.0大于或小于0

我想要求更多澄清.这是我的示例程序

double diff = 7.500 - 7.500;
System.out.println(diff); // result 0.0
if (diff > 0) {
    System.out.println("+" + diff ); //result +0.0
} else {
    System.out.println("-" + diff ); //result -0.0
}
Run Code Online (Sandbox Code Playgroud)

我的结果是-0.0.我的期望是0 == 0.0然后跳过if else条件.但它进入了其他条件.双倍0.0是大于还是小于0?

java double

0
推荐指数
1
解决办法
7610
查看次数

Java DecimalFormat HALF_UP舍入错误

我使用的是HALF_UP舍入模式DecimalFormat的,我有地方工作不正常的escenery,我不知道为什么.

DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.HALF_UP);
float tmp = (float) (0.5 * 1.05);
df.format(tmp);
float mul = Float.parseFloat(df.format(tmp));
Run Code Online (Sandbox Code Playgroud)

mul变量的值,我希望有0.53值,我收到0.52值.

我正在使用Java 1.8.0_131.

已解决的最终法规

BigDecimal mul = new BigDecimal(0.5).multiply(new igDecimal(1.05));
mul = mul.setScale(2, RoundingMode.HALF_UP);
System.out.println(mul);
Run Code Online (Sandbox Code Playgroud)

java rounding bigdecimal

0
推荐指数
1
解决办法
458
查看次数

大十进制与双精度相比,提供更好的精度

我在遗留软件中找到了一些代码,我有兴趣知道哪个提供了更好的精度,因为它目前是采用双精度并对其进行计算的地方:

double doubleNum = (Math.round(55.88d * 100) - Math.round(2.33d * 100));
Run Code Online (Sandbox Code Playgroud)

第二个选择

BigDecimal bnv = BigDecimal.valueOf(55.88);
BigDecimal bsv = BigDecimal.valueOf(2.33);

System.out.println(bnv.subtract(bsv).setScale(2));
Run Code Online (Sandbox Code Playgroud)

两者产生相同的输出,我的理解是使用 bigdecimal 确保更精确。但是将 double 转换为 BigDecimal 时可能会出现损失

此外,第一个选项在铸造时可能会造成损失。

我总是使用 BigDecimal,但在这种情况下。

java bigdecimal

0
推荐指数
1
解决办法
1221
查看次数

标签 统计

java ×8

bigdecimal ×3

types ×2

biginteger ×1

bits ×1

c ×1

double ×1

ibm-midrange ×1

java-8 ×1

numbers ×1

rounding ×1

rpg ×1