gpt4 book ai didi

java - 如何精确除9位数以上的小数?

转载 作者:行者123 更新时间:2023-12-02 20:17:11 25 4
gpt4 key购买 nike

执行此操作时

float d = (106108048) / (float)10;

输出是1.0610805E7,但我正好需要10610804.8。这样做的正确方法是什么?

在 Hacker Rank 上,我正在解决以下问题:给你一个数字 N,你需要打印数字正好整除 N 的位置数。

输入:

1
106108048

结果:

5  

我的解决方案:

 import java.io.*;
import java.util.*;
import java.math.*;


public class Solution{

public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int p = 0;
boolean check = true;
while(sc.hasNext()){
if(check){
check= false;
sc.next();
}
Integer number = sc.nextInt();
String snumner = number.toString();
int q = 1;
int j = 0;
for(int i = 0 ; i< snumner.length();i++ ){
q = q *10;
p = q;
System.out.println("p:"+p)
System.out.println("number:"+number);
float d = (number)/(float)p;//problem is here
System.out.println("ddd:"+d);
String ss = String.valueOf(d);
System.out.println("SS:"+ss);
int index = ss.indexOf('.');
System.out.println("in"+index);
System.out.println("VV"+ss.charAt(index+1));
String newn = " " + ss.charAt(index+1);
int sss= Integer.parseInt(newn.trim());
System.out.println("SSS"+sss);
if(sss != 0){
if(number%sss ==0){
j++;
}
}
}
System.out.println("no:"+j);
}
}
}

最佳答案

使用java的BigDecimal反而。该类专为定点运算而设计,将提供更好的精度。

引用 BigDecimal 的文档:

Immutable, arbitrary-precision signed decimal numbers. A BigDecimal consists of an arbitrary precision integer unscaled value and a 32-bit integer scale.

一个例子:

import java.math.BigDecimal;
import java.math.MathContext;

public class BigDecimalExample{
public static void main(String[] args) {
BigDecimal dividend = BigDecimal.valueOf( 106108048 );
BigDecimal divisor = BigDecimal.valueOf( 10 );
BigDecimal result = dividend.divide( divisor, MathContext.DECIMAL64 );
System.out.println( result.toPlainString( ) );
}
}

这将打印出:

10610804.8

请注意,此示例使用 MathContext.DECIMAL64作为将精度和舍入模式传递给 divide 的一种方式方法。这将设置与 IEEE 754R Decimal64 格式、16 位数字相匹配的精度和舍入模式,以及 IEEE 754R 默认值 HALF_EVEN 的舍入模式。

您可以调整精度和 RoundingMode通过 constructing a MathContext object如果需要的话。

最好在 divide 方法中传递 MathContext 参数以进行任意计算。 divide(BigDecimal divisor)如果精确的商没有终止小数扩展,则该方法将抛出 ArithmeticException。

关于java - 如何精确除9位数以上的小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com