相关疑难解决方法(0)

舍入到任意数量的有效数字

你怎么能将任何数字(不只是整数> 0)舍入到N位有效数字?

例如,如果我想要舍入到三位有效数字,我正在寻找一个可以采用的公式:

1,239,451并返回1,240,000

12.1257并​​返回12.1

.0681并返回.0681

5并返回5

当然,算法不应该被硬编码为仅处理3的N,尽管这将是一个开始.

algorithm rounding significant-digits

79
推荐指数
6
解决办法
4万
查看次数

C#中Java BigDecimal类的等价物是什么?

BigDecimal是一个java.math包中的类,它具有处理大量特定规模的许多好处.c#中是否存在具有此功能的等效类或数据类型.

c# java bigdecimal equivalent

45
推荐指数
4
解决办法
5万
查看次数

Java中是否有常用的有理数字库?

我正在寻找一个代表分数(有理数)的Java库.例如,如果我想存储分数,1/3那么它将不会被保存,0.33333因为它将失去其准确性.

以下是我希望在这样的库中找到的一些功能:

  • getNumerator()
  • getDenominator()
  • add(Rational r1, Rational r2),subtract(Rational r1, Rational r2),multiply(Rational r1, Rational r2),divide(Rational r1, Rational r2)
  • isProper()
  • getCommonDenominator(Collection<Rational> rationals)
  • getSimplified()

我可以自己实现这样一个库,虽然我想知道类似的东西是否已经存在.

编辑:如果库实现(除了上面)一些数论算法,如getEgyptianFractionsSum()等等,也会很好.

java math

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

如何在Java中以0.1f的增量在0.1f和1.0f之间进行迭代?

可能重复:
Java浮动和双重,如何避免0.0 + 0.1 + ... + 0.1 == 0.9000001?

我在Java中遇到以下问题 - 我需要以0.1f为增量在0.1f和1.0f之间迭代,所以我希望我的输出看起来像这样:

    0.1
    0.2
    0.3
    0.4
    ...
    0.9
Run Code Online (Sandbox Code Playgroud)

相反,当我这样做时:

for(float i = 0.1f; i < 1f; i += 0.1f)
    System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

我明白了

0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Run Code Online (Sandbox Code Playgroud)

我想它与计算机表示分数的方式有关,但我想知道为什么会这样,如果我有什么办法可以阻止它.谢谢.

java

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

Java-双变量问题

这是我的简单方程计数器。现在它计算带有两个变量的方程。它基于尝试ab变量的许多组合(400 万或 1600 万)。所以代码运行良好并且计数准确。但是因为我尝试将变量更改b为 double ,事情出了问题。我预计行b=b+0.1会确保b每 10 次将变量设置为 1.0。但在启动后几乎立即会出现更多的十进制数字b。那么我是否使用了错误的数据类型?或者我应该将变量提高b不同的值?(我也尝试将所有变量更改为双倍)。谢谢您的建议!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Buffer{
static int a;
static double b;
static BufferedReader reader;
static String query;
static int range;
static int result;

public static void main(String[] args)throws IOException{
    reader=new BufferedReader(new InputStreamReader(System.in));

    System.out.print("Choose speed of test(fast or slow):");
    query=reader.readLine();

    if(query.equals("fast"))
        range=2000;
    else
        range=4000;

     //START THE TEST//       
    while((a+b)!=26000){
        b=b+0.1;
        if(b==range+1){
            b=0;
            a=a+1;
        }
        if((a+b)!=26000) …
Run Code Online (Sandbox Code Playgroud)

java double

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