如何在Java中存储长十进制数
我有一个java代码,上面说如何在Java中存储长十进制数,java,Java,我有一个java代码,上面说 btmpW / imgW 但在本例中,我得到0作为值,我尝试使用int、long、float和double作为我的数据类型,但它仍然返回0 当我尝试对两个int值执行Log.I()时,我得到了以下结果 I/btmpW: 548 I/imgW: 1041 所以用计算器计算,我得到了0.5346341463。。。我是Java新手,但我认为Java不接受超过9位的数字,这让我假设Java只返回(int)0,因为数字超过9,所以它忽略了小数。所以我搜索并找到了类似于Bi
btmpW / imgW
但在本例中,我得到0
作为值,我尝试使用int
、long
、float
和double
作为我的数据类型,但它仍然返回0
当我尝试对两个int值执行Log.I()
时,我得到了以下结果
I/btmpW: 548
I/imgW: 1041
所以用计算器计算,我得到了0.5346341463
。。。我是Java新手,但我认为Java不接受超过9位的数字,这让我假设Java只返回(int)0
,因为数字超过9,所以它忽略了小数。所以我搜索并找到了类似于BigDecimal
和biginger
的东西。所以我尝试使用它们,但我得到了一些错误
所以我想知道,有没有一种方法可以在Java中存储这样的值btmpW
和imgW
是用户定义的,所以我不知道运行btmpW/imgW
时会出现什么结果,所以基本上,Java中是否有一种存储长、短、整数和小数的数字数据类型
更新
下面是我得到的错误
BigDecimal a = (BigDecimal)btmpW / imgW; //Inconvertibles types; cannot cast 'int' to java.math.BigDecimal
BigInteger a = (BigInteger)btmpW / imgW; //Inconvertibles types; cannot cast 'int' to java.math.BigInteger
BigIntegers a = (BigIntegers)btmpW / imgW; //Inconvertibles types; cannot cast 'int' to java.math.BigIntegers
BigDecimal a = btmpW / imgW; //Inconvertibles types; REQUIRED: BigDecimal FOUND int
BigInteger a = btmpW / imgW; //Inconvertibles types; REQUIRED: BigInteger FOUND int
BigIntegers a = btmpW / imgW; //Inconvertibles types; REQUIRED: BigIntegers FOUND int
试试这个:
int btmpW = 548;
int imgW = 1041;
BigDecimal btm = new BigDecimal(btmpW);
BigDecimal img = new BigDecimal(imgW);
System.out.println(img.divide(btm, MathContext.DECIMAL128));
输出:1.899635036496350364963503649635036 参考:
有关MathContext的更多信息:您必须先将这两个数字转换为BigDecimal。我不确定您的数字是什么类型的,但如果是字符串、基元(例如int、double)或基元包装器(例如Integer、double),您可以尝试按如下方式直接转换它们:
BigDecimal dbBtmpW = new BigDecimal(btmpW);
BigDecimal dbImgW = new BigDecimal(imgW);
之后,您可以使用divide方法执行操作,不幸的是Java不支持运算符重载,因此您必须调用特定的方法:
BigDecimal result = dbBtmpW.divide(dbImgW);
我希望这能对你有所帮助。我想这个把戏起作用了。。。我不得不将我的
int
值更改为double
,改为使用double
初始代码
int imgW = imageView.getWidth();
int btmpW = bitmap.getWidth();
double imgW = imageView.getWidth();
double btmpW = bitmap.getWidth();
double a = btmpW / imgW;
最终代码
int imgW = imageView.getWidth();
int btmpW = bitmap.getWidth();
double imgW = imageView.getWidth();
double btmpW = bitmap.getWidth();
double a = btmpW / imgW;
BigInteger
和BigDecimal
。你应该告诉我们你试过什么。但首先尝试搜索错误。如果你需要帮助,告诉我们错误是什么。祝你好运所以我尝试使用它们,但我遇到了一些错误
-您可能走对了方向。你面临哪些错误?浮点数本质上不限制小数点后的位数,但取决于mantisa(IEEE-754)这是否回答了您的问题?我已经更新了我的问题,以显示errorsJava没有运算符重载。试试看<代码>大十进制a=btmpW.除法(imgW)代码>-接下来,您不能将原语值强制转换为BigDecimal
(即使可以,它们也不会神奇地获得更高的精度)。相反,您应该参考JavaDoc。您可能想使用构造函数(因为您有用户输入)。不,它不起作用。它通过一个异常非终止十进制展开;没有可精确表示的十进制结果。我们需要在这里添加MathContextI,我不太喜欢新的BigDecimal(int)。这并不是真的错,但我假设OP以某种方式处理用户输入。在输入时,读入int
不会使OP比int
存储更高的精度。这就是为什么我试图将OP指向新的BigDecimal(String)
MathContext。DECIMAL128
抛出了一个错误。。。我不知道为什么,但我正在Android Studio平台上编写代码import java.math.MathContext代码>和谷歌,然后再问这里。