Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将包含小数的字符串转换为长字符串_Java - Fatal编程技术网

Java 将包含小数的字符串转换为长字符串

Java 将包含小数的字符串转换为长字符串,java,Java,我有以下示例() 它抛出一个异常: Exception in thread "main" java.lang.NumberFormatException: For input string: "30000.1" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Long.parseLong(Long.java:419) at java.lang.Long.pa

我有以下示例()

它抛出一个异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "30000.1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:419)
at java.lang.Long.parseLong(Long.java:468)
at Main.main(Main.java:9)

但为什么它不让我直接把数字转换成字符串呢?我可以把数字转换成整数,然后再转换成双精度。但是还有其他方法吗?

因为long不能有小数部分,所以可以将其转换为double,然后将其转换为long忽略小数部分值
30000.1
是无效的long值。您可以首先解析双精度值:

lDurationMillis = (long)Double.parseDouble("30000.1");

在这种情况下,可以使用BigDecimal:

BigDecimal bd = new BigDecimal("30000.1");
long l = bd.setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
System.out.println(l);

标题说将字符串转换为长字符串,第一个问题是关于将数字转换为字符串,下一个语句是关于将数字转换为整数转换为字符串。我很困惑

但对于任何与浮点有关的问题,我必须让你们看到强制性的参考

在java中,
int
long
没有小数部分,因此像
3000.1
这样的字符串不能与其中一个合并。它可以转换为
float
double
,但如果您阅读了上述文章,您将意识到转换可能会有损,即如果您可以将
double
转换回
字符串
,则可能无法恢复原始的
3000.1
。这将是接近的东西,对于接近的适当定义,但可能不一样


如果你想使用精确的精度,那就是你的朋友。它将比数字类型慢得多,但它将是精确的

您可以按如下方式进行数字格式处理:

long lDurationMillis =  0;
        try{
            NumberFormat nf = NumberFormat.getInstance();
            lDurationMillis = nf.parse("30000.1").longValue();
            System.out.print("Play Duration:" + lDurationMillis);
        }catch(ParseException e)
        {
            e.printStackTrace();
        }
输出:

Play Duration:30000

为什么不使用
double.parseDouble(文本)将十进制直接转换为
double
或使用
新的BigDecimal(文本)转换为BigDecimal标题说将字符串转换为长字符串,第一个问题是关于将数字转换为字符串,下一个语句是关于将数字转换为整数转换为字符串。我不明白你的意思。例如,您可以使用
Long将任何数字转换为
String
。toString(Long l)
。Long.toString(Long l)也会产生相同的错误您是否知道
30000.1
不是有效的Long?我已经了解到使用
双精度
数据类型可能会导致精确的错误。这不能在这里发生吗?这可能只发生在数字的小数部分。不可分割的部分将很好:)
Play Duration:30000