Java如何在长字符串中表示十进制数
如何将字符串编号“6542.56999999997”转换为长字符串?假设我希望在长时间内有8位精度,因此它应该看起来像: 长:654257000000 不,我不想使用BigInt。试试这个:Java如何在长字符串中表示十进制数,java,Java,如何将字符串编号“6542.56999999997”转换为长字符串?假设我希望在长时间内有8位精度,因此它应该看起来像: 长:654257000000 不,我不想使用BigInt。试试这个: NumberFormat formatter = new DecimalFormat("#0.00000000"); String longStr = formatter.format(6542.5699999999997).replaceAll("\\D", ""); Long l
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
这是非常缓慢和低效的。使用数学运算将更有效。这创建了很多对象,而实际上您不需要创建任何对象。importjava.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