当前位置: 首页 > 知识库问答 >
问题:

如何判断表示为字符串的十进制数是否适合双精度?

安建木
2023-03-14

我正在分析一个字符串值,我知道它包含一个数字。

如果它只包含数字,并且它在整数之间。MIN_VALUE和整数。MAX_VALUE我将它解析为int,同样长时间,否则我使用Bigintger。

如果它包含一个十进制值,我想将其解析为double或BigDecimal。

我可以测试字符串中的数值是否“适合”成双精度,因此可以安全地解析为双精度,或者是否需要将其保存在BigDecimal中以防止精度损失?

共有3个答案

汤嘉平
2023-03-14

我将把它解析为一个BigDecimal,然后检查double是否可以在不丢失信息的情况下将值存储到可接受的程度。

凌成天
2023-03-14

Double类包含以下常量:

public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

如果可以的话,您可以使用它们来执行检查。
但只需try/catch块不是更容易吗:

String str = "1234567890";
double number = 0;
try {
    number = Double.parseDouble(str);
} catch (NumberFormatException e) {
    e.printStackTrace();
    // put extra code here
}
仇睿
2023-03-14

并且因此可以安全地解析为双精度,或者是否需要将其保存在BigDecimal中以防止精度损失?

这不是你想要的答案,但因为你似乎担心精度的损失,你应该用一个BigDecimal来代替任何double

数字0.1可以适合双精度,但它并不精确(因为0.1无法以二进制形式准确表示)。

看:浮点数学坏了吗?

 类似资料:
  • Python3 实例 以下实例通过创建自定义函数 is_number() 方法来判断字符串是否为数字: 实例(Python 3.0+)# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com def is_number(s): try: float(s) return True except ValueErr

  • 检查给定的参数是否是一个字符串。 使用 typeof 来检查一个值是否为一个字符串。 const isString = val => typeof val === 'string'; isString('10'); // true

  • 本文向大家介绍Java判断字符串为空、字符串是否为数字,包括了Java判断字符串为空、字符串是否为数字的使用技巧和注意事项,需要的朋友参考一下 关于 String 的判空: 注:“==”比较两个变量本身的值,即两个对象在内存中的首地址。而“equals()”比较字符串中所包含的内容是否相同。第二种写法中,一旦 selection 真的为 null,则在执行 equals 方法的时候会直接报空指针异

  • 问题内容: 如何确定整数位数和Java中类似数字的小数点后位数。 问题答案: 双精度并不总是精确的表示形式。您只能说如果将其转换为字符串,将有多少个小数位。 这仅适用于未转换为指数符号的数字。您可能会认为1.0小数点后一位或无位。

  • 我想把双精度数字转换为十进制。 例如,我有23.43,双倍值是(使用matlab):174 71 255 122 20 110 55 64现在有了这个,我怎么写一个java程序给我23.43? 下面是matlab中双精度的计算: 1的51到0的分数f

  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案: