加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java将N的精确值从n提升到n

发布时间:2020-12-15 05:09:41 所属栏目:Java 来源:网络整理
导读:我有这个简单的问题. 样本输入: 输入一个 95.123 输入两个12 将第一个输入提升到第二个输入必须给出精确的功率值. 像这样:548815620517731830194541.8990253434157159735359672218698 我做不到. 这是我到目前为止所做的.我想我错过了一些东西 System.out.p
我有这个简单的问题.

样本输入:

输入一个
95.123

输入两个12

将第一个输入提升到第二个输入必须给出精确的功率值.
像这样:548815620517731830194541.8990253434157159735359672218698

我做不到.

这是我到目前为止所做的.我想我错过了一些东西

System.out.println("Input One");
Scanner scanner = new Scanner(System.in);
Double inputOne = scanner.nextDouble();
System.out.println("Input Two");
Double inputTwo = scanner.nextDouble();
Double result = Math.pow(inputOne,inputTwo);
BigDecimal big = new BigDecimal(result);
System.out.println(big);

我错过了什么?

解决方法

what am i missing out?

你使用double来开始,而double不能完全代表95.123.然后,您将使用具有double值的Math.pow,这将进一步降低精度.将已经有损的值转换为高精度值是没有意义的……它无法神奇地恢复数据.

只需将字符串传递给第一个参数的BigDecimal构造函数,然后将BigDecimal.pow传递给计算.

示例代码:

import java.math.BigDecimal;

public class Test {

    public static void main(String[] args) {
        BigDecimal inputOne = new BigDecimal("95.123");
        int power = 12;
        BigDecimal result = inputOne.pow(power);
        System.out.println(result);
    }
}

输出:

548815620517731830194541.899025343415715973535967221869852721

(看起来您的预期值实际上是截断的……确切的值应该以1结尾,因为312以1结尾.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读