我在C或C++中寻找一个好的任意精度数学库.你能给我一些意见/建议吗?
主要要求:
这是我到目前为止发现的:
我所知道的:
我有一个BigDecimal数字,我只考虑它的2位小数,所以我截断它使用:
bd = bd.setScale(2, BigDecimal.ROUND_DOWN)
Run Code Online (Sandbox Code Playgroud)
现在我想将它打印为String但是如果它是0则删除小数部分,例如:
1.00 - > 1
1.50 - > 1.5
1.99 - > 1.99
我尝试使用Formatter,formatter.format,但我总是得到2位小数.
我怎样才能做到这一点?也许从bd.toPlainString()处理字符串?
我试图使用longs为自己的货币制作自己的类,但显然我应该使用BigDecimal.有人可以帮助我开始吗?什么是用最好的方式BigDecimalS代表美元货币,比如至少使它但没有对仙超过2位小数,等等.对于API BigDecimal是巨大的,我不知道要使用哪些方法.此外,BigDecimal具有更好的精度,但如果它通过一个double?如果我做新的BigDecimal(24.99),它会如何与使用double?或者我应该使用使用的构造函数String?
我有一个BigDecimal对象,我想将其转换为字符串.问题是我的值得分,我得到一个巨大的数字(长度),我只需要字符串中的原始数字,例如:for
BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());
Run Code Online (Sandbox Code Playgroud)
输出是:
10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375
Run Code Online (Sandbox Code Playgroud)
我需要输出正好是10.0001字符串中的数字
我为生活编写货币交易应用程序,所以我必须处理货币价值(遗憾的是,Java仍然没有十进制浮动类型,并且没有任何东西可以支持任意精确的货币计算)."使用BigDecimal!" - 你可能会说.我做.但现在我有一些代码在性能是一个问题,BigDecimal为超过1000次(!)慢于double原语.
计算很简单:系统做什么是计算a = (1/b) * c很多很多次(其中a,b并c有固定的点值).然而,问题在于此(1/b).我不能使用定点算术,因为没有固定点.而且BigDecimal result = a.multiply(BigDecimal.ONE.divide(b).multiply(c)不仅丑陋,而且缓慢.
我可以用什么来代替BigDecimal?我需要至少10倍的性能提升.我发现了其他优秀的JScience库,它具有任意精度的算术,但它甚至比BigDecimal慢.
有什么建议?
我正在使用BigDecimal进行简单的乘法运算,并且在乘以零时我发现了一些奇怪的行为(在这个用例中乘以零是正确的).
基本数学告诉我,任何乘以零的数字都将等于零(参见:零产品属性和乘法属性)
但是,以下代码将始终失败并出现相同的错误:
assertEquals(new BigDecimal(0), new BigDecimal(22.3).multiply(new BigDecimal(0)));
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)java.lang.AssertionError: Expected :0 Actual :0E-48
这是BigDecimal的不准确,还是我在某处遗漏了数学的一些利基分支?
注意:在IntelliJ 11中运行的JDK 1.6.0_27
在Java中,我想获取一个double值并将其转换为a BigDecimal并将其String值打印到一定的精度.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
double d=-.00012;
System.out.println(d+""); //This prints -1.2E-4
double c=47.48000;
BigDecimal b = new BigDecimal(c);
System.out.println(b.toString());
//This prints 47.47999999999999687361196265555918216705322265625
}
}
Run Code Online (Sandbox Code Playgroud)
它打印这个巨大的东西:
47.47999999999999687361196265555918216705322265625
并不是
47.48
我正在进行BigDecimal转换的原因有时候,double值会包含很多小数位(即-.000012),将double转换为String时会产生科学记数法-1.2E-4.我想以非科学记数法存储String值.
我想让BigDecimal总是有两个精度单位:"47.48".BigDecimal可以限制转换为字符串的精度吗?
当存储通常格式为44.087585(即在点之前最多2个数字和6dp)的纬度/经度时,我是否需要打扰bigdecimals?
在Java中,我正在使用BigDecimal该类,我的部分代码要求我从中提取小数部分. BigDecimal似乎没有任何内置的方法来帮助我获得小数点后的数字BigDecimal.
例如:
BigDecimal bd = new BigDecimal("23452.4523434");
Run Code Online (Sandbox Code Playgroud)
我想4523434从上面提到的数字中提取出来.最好的方法是什么?
我有这个字符串:10,692,467,440,017.120(这是一个金额).
我想将它解析为BigDecimal.问题是我尝试了DecimalFormat和NumbeFormat都是徒劳的.有帮助吗?
bigdecimal ×10
java ×9
currency ×2
double ×2
string ×2
biginteger ×1
c ×1
c++ ×1
formatting ×1
geospatial ×1
gmp ×1
math ×1
optimization ×1
parsing ×1