你怎么能将任何数字(不只是整数> 0)舍入到N位有效数字?
例如,如果我想要舍入到三位有效数字,我正在寻找一个可以采用的公式:
1,239,451并返回1,240,000
12.1257并返回12.1
.0681并返回.0681
5并返回5
当然,算法不应该被硬编码为仅处理3的N,尽管这将是一个开始.
BigDecimal是一个java.math包中的类,它具有处理大量特定规模的许多好处.c#中是否存在具有此功能的等效类或数据类型.
我正在寻找一个代表分数(有理数)的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中遇到以下问题 - 我需要以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)
我想它与计算机表示分数的方式有关,但我想知道为什么会这样,如果我有什么办法可以阻止它.谢谢.
这是我的简单方程计数器。现在它计算带有两个变量的方程。它基于尝试a和b变量的许多组合(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)