Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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,如何将字符串编号“6542.56999999997”转换为长字符串?假设我希望在长时间内有8位精度,因此它应该看起来像: 长:654257000000 不,我不想使用BigInt。试试这个: NumberFormat formatter = new DecimalFormat("#0.00000000"); String longStr = formatter.format(6542.5699999999997).replaceAll("\\D", ""); Long l

如何将字符串编号“6542.56999999997”转换为长字符串?假设我希望在长时间内有8位精度,因此它应该看起来像:

长:654257000000

不,我不想使用BigInt。

试试这个:

    NumberFormat formatter = new DecimalFormat("#0.00000000");
    String longStr = formatter.format(6542.5699999999997).replaceAll("\\D", "");
    Long longVal = Long.parseLong(longStr);
试试这个:

    NumberFormat formatter = new DecimalFormat("#0.00000000");
    String longStr = formatter.format(6542.5699999999997).replaceAll("\\D", "");
    Long longVal = Long.parseLong(longStr);

你可以先乘,然后像这样取整:

long val = (long)(6542.5699999999997 * 100000000 + 0.5);

如果数字也可以是负数,则必须单独处理该情况,因为
+0.5
技巧仅适用于正值。

您可以先乘法,然后像这样取整:

long val = (long)(6542.5699999999997 * 100000000 + 0.5);


如果数字也可以为负值,则必须单独处理,因为
+0.5
技巧仅适用于正值。

精度必须有多高?是否始终在小数点后8位,而不管小数点前有多少位?如果是这样的话,那么您可能必须自己解析字符串,因为没有一个基元类型可以处理任意精度。将其转换为长整数以截断小数显示精度必须精确吗?是否始终在小数点后8位,而不管小数点前有多少位?如果是这样的话,那么您可能必须自己解析字符串,因为没有一个基元类型可以处理任意精度。将其转换为long以截断小数端口
java.text.NumberFormat
java.text.DecimalFormat
这是非常缓慢和低效的。使用数学运算将更有效。这创建了很多对象,而实际上您不需要创建任何对象。import
java.text.NumberFormat
java.text.DecimalFormat
这是非常缓慢和低效的。使用数学运算将更有效。这创建了很多对象,而实际上您不需要创建任何对象。如果输入为6.569,则结果必须为657000000,但此代码的输出是656900000@RahimDastar“我不明白,你为什么要得到657000000的结果呢?”拉希姆达斯塔:嗯,OP说的是8位精度。所以四舍五入应该在第8位小数。注意:对于负数,您需要
-0.5
;)+1BTW要转换回,您需要
/1e8
而不是
*1e-8
如果输入为6.569,则结果必须为657000000,但此代码的输出为656900000@RahimDastar“我不明白,你为什么要得到657000000的结果呢?”拉希姆达斯塔:嗯,OP说的是8位精度。所以四舍五入应该在第8位小数。注意:对于负数,您需要
-0.5
;)+1BTW要转换回,您需要
/1e8
而不是
*1e-8