似乎减法正在触发某种问题,结果值是错误的.
double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;
Run Code Online (Sandbox Code Playgroud)
78.75 = 787.5*10.0/100d
double netToCompany = targetPremium.doubleValue() - tempCommission;
Run Code Online (Sandbox Code Playgroud)
708.75 = 787.5 - 78.75
double dCommission = request.getPremium().doubleValue() - netToCompany;
Run Code Online (Sandbox Code Playgroud)
877.8499999999999 = 1586.6 - 708.75
由此产生的预期值为877.85.
应该怎样做才能确保正确计算?
我最近使用以下代码测试了一些内容
public static void main(String[] args) {
double x = 4.35 * 100;
System.out.println(x);
}.
我感兴趣的是为什么这会产生434.99999999999994而不是435.0.谢谢
我正在尝试计算以下两个双打的乘积:
double x = 196.0d;
double y = 0.5144d;
double z = x * y;
Run Code Online (Sandbox Code Playgroud)
答案应该是,z = 100.8224;但java计算它z = 100.82239999999999;
是什么造成的?
所以在编码时我或多或少都是一个菜鸟.我正在学习java的大学课程,我的一个练习要求我编写一个代码,使用左端点方法,中点方法和梯形方法来评估积分.
为此,我需要使用一个for循环,每次增加一步.我知道如何使用double来做到这一点,但问题是,当我使用double数据类型运行计算时,它会给我舍入错误.在阅读之后(主要是查看其他堆栈溢出问题),我想我应该使用BigDecimal来消除舍入错误.
但是使用BigDecimal会给我一大堆错误.据我所知,我不能使用常规运算符,如<,>,==等,因为BigDecimal不是原始数据类型.但后来我不知道如何做一个基本的for循环,在仍然使用BigDecimal的同时递增.我在这里看到的另一件事建议使用Commons-math?(第二个答案)
我没有最简单的想法如何使用它,据我所知,它与普通的旧的import java.lang.Math不同.
所以我想我的问题是,如何让我的代码在for循环中使用BigDecimal工作,并且通常将数字进行比较,或者我如何使用Common-Math简单地避免舍入错误?
这是我的代码:
import java.util.Scanner;
import java.lang.Math;
import java.math.BigDecimal;
public class IntegrationMethods{
//calculates the value of the function f(x)=x^2
public static BigDecimal f(BigDecimal x){
return x.multiply(x);
}
//uses a, b and N as arguments, calculates sum of integral using left
endpoint rule
public static BigDecimal leftEndpoint(BigDecimal a, BigDecimal b,
BigDecimal n){
BigDecimal h = (b.subtract(a)).divide(n);
sum = new BigDecimal("0");
i = new BigDecimal("0");
for(i.compareTo(n)<=0;){
sum = sum.add(h.multiply(f(a.add(h.multiply(i-1)))));
i = i.add(new BigDecimal(1));
}
return sum; …Run Code Online (Sandbox Code Playgroud) 虽然我很开心Java Puzzlers的代码(我没有这本书),但我遇到了这段代码
public static void main(String args[]) {
System.out.println(2.00 - 1.10);
}
Run Code Online (Sandbox Code Playgroud)
输出是
0.8999999999999999
Run Code Online (Sandbox Code Playgroud)
当我尝试将代码更改为
2.00d - 1.10d 我仍然得到相同的输出 0.8999999999999999
对于,2.00d - 1.10f输出为0.8999999761581421
For,2.00f - 1.10d输出为0.8999999999999999
For,2.00f - 1.10fOutput为0.9
为什么我不能像0.9第一个那样获得输出?我不能用这个做任何头或尾?有人可以清楚说明这一点吗?