当前位置: 首页 > 面试题库 >

如何提取double / BigDecimal的小数位数

何正德
2023-03-14
问题内容

假设我们有一个双值12345.6789(应该是动态的)

现在,需求是对数字进行拆分并获得十进制数字和小数位数,它们将是:

double number = 12345.6789;
int decimal = 12345;
int fractional = 6789;

我得到了小数部分的结果,但是请您给出小数部分的提示?非常感谢。


问题答案:

double number = 12345.6789; // you have this
int decimal = (int) number; // you have 12345
double fractional = number - decimal // you have 0.6789

这里的问题是小数部分没有写为“
0.6789”在内存中,而是可以有一定的“偏移量”。例如0.6789可以存储为0.67889999291293929991

我认为您在这里主要关心的不是 获得 小数部分,而是获得一定 精度 的小数部分。

如果您想获取分配给它的确切值,则可能需要考虑一下(当然,这不是一个干净的解决方案):

String doubleAsText = "12345.6789";
double number = Double.parseDouble(doubleAsText);
int decimal = Integer.parseInt(doubleAsText.split("\.")[0]);
int fractional = Integer.parseInt(doubleAsText.split("\.")[1]);

但是,正如我所说,这不是最有效,最干净的解决方案。



 类似资料:
  • 我算出了小数部分,但你能给出小数部分的提示吗?多谢.

  • 问题内容: 在Java中,我正在使用该类,并且代码的一部分要求我从其中提取小数部分。 似乎没有任何内置方法可以帮助我获取a的小数点后的数字。 例如: 我想从上面表示的数字中提取。最好的方法是什么? 问题答案: 我会尝试的。 使用方法和常量。

  • 我在斯卡拉偶然发现了intersting这个东西(可能只对我来说)。总而言之,如果我们有一个BigDecimal(假设,其中是十进制字符串) 不会总是产生< code>true。我认为它与大小数的运算有关。我知道在scala中,创建BigDecimals的默认MathContext设置为< code>DECIMAL128(四舍五入,精度等于34)。我在小数点后超过30位的小数上发现了这种行为 我的

  • 我对编程很陌生,在大学里我们学习了不同类型的数字(整数、短数、浮数、双数)。Float和double是浮点数。通常,它们由一个符号+/-、一个尾数和一个指数组成。每个部分占用一定数量的比特。一个浮动最多可以显示小数点后7位,最多可以双倍显示16位。其公式是: 23·log10(2)=23·(log(2)/log(10))≈23·0.3≈7(浮点数小数点后) 52·0.3≈16(双人小数点后) 我知

  • 问题内容: 当用的输入用和与输入不同的结果似乎出现。 x输出为 当y是 我说这是因为双重不准确性吗?但是由于这是一个,不应该一样吗? 问题答案: 我说这是因为双重不精确吗? 您绝对正确,这完全是由于的不精确。 但是由于这是一个,不应该一样吗? 不,不应该。在创建时就引入了错误,因为常量已经嵌入了错误。到那时,您无法采取任何措施来修复此表示错误:当时那匹众所周知的马已经离开了谷仓,所以现在关门已经太

  • 问题内容: 我必须计算一些浮点变量,而我的同事建议我使用而不是,因为这样会更精确。但是我想知道它是什么以及如何最大程度地利用它? 问题答案: 是表示数字的精确方法。A 具有一定的精度。由于幅值之差太大,求和时使用不同倍数(例如和)的双精度可能会导致它们一起下降。有了这不会发生。 的缺点是,它是较慢的,和它有点更难以程序算法的方式(由于不被过载)。 如果你要花钱,或必须精打细算,请使用。否则往往就足