Java pow,不舍入最终值

Java pow,不舍入最终值,java,math,formula,Java,Math,Formula,我正在尝试为我的一个函数编写一个公式,其中我需要将X提升到Y的幂次方。我正在使用的值非常小,一旦我使用Math的pow函数、biginger和BigDecimal,就会四舍五入 例如,如果我使用以下值,它将返回1000,而它应该返回1006.931669! T0=1000,TN=1,k=1,N=1000 根据计算器,输出是正确的 public class Main { public static void main(String[] args) { double fina

我正在尝试为我的一个函数编写一个公式,其中我需要将X提升到Y的幂次方。我正在使用的值非常小,一旦我使用Math的pow函数、biginger和BigDecimal,就会四舍五入

例如,如果我使用以下值,它将返回1000,而它应该返回1006.931669! T0=1000,TN=1,k=1,N=1000


根据计算器,输出是正确的

public class Main
{
    public static void main(String[] args) {
        double finalTemp = 1.0;
        double initialTemp = 1000.0;
        double k = 1.0;
        double n = 1000.0;
        double X = (finalTemp/initialTemp);
        double A = Math.pow(X, (k/n));
        double tk = initialTemp * A;
        System.out.println(tk);
    }
}

输出为993.1160484209338

根据计算器,输出是正确的

public class Main
{
    public static void main(String[] args) {
        double finalTemp = 1.0;
        double initialTemp = 1000.0;
        double k = 1.0;
        double n = 1000.0;
        double X = (finalTemp/initialTemp);
        double A = Math.pow(X, (k/n));
        double tk = initialTemp * A;
        System.out.println(tk);
    }
}

输出为993.1160484209338

它们被整型算术除法。所以,将整数a除以整数b,就可以得到b与a的匹配次数,如果操作数的类型是双精度的,则执行实数除法

double X = (finalTemp/(double)initialTemp);
double A = Math.pow(X, (k/(double)n));
double tk = initialTemp * A;

它们被分成整数运算。所以,将整数a除以整数b,就可以得到b与a的匹配次数,如果操作数的类型是双精度的,则执行实数除法

double X = (finalTemp/(double)initialTemp);
double A = Math.pow(X, (k/(double)n));
double tk = initialTemp * A;

请显示您正在使用的代码using@Lino代码添加!我想你有这个问题是因为你怎么做的。要解决您的问题,您可能需要浮点除法,首先将分子中的所有项相乘,然后除以分母。请显示您正在使用的代码的副本using@Lino代码添加!我想你有这个问题是因为你怎么做的。要解决您的问题,您可能需要浮点除法,首先将分子中的所有项相乘,然后再除以分母。是否还应将n转换为双精度?是的,您需要转换。谢谢您的解释,现在完全有意义了!难道你不应该把n投到翻倍吗?是的,你需要投。谢谢你的解释,现在完全有道理了!