Java—获取小数点后数字的最佳方法

Java—获取小数点后数字的最佳方法,java,regex,Java,Regex,编辑了我的问题: 提取小数点后数字的最佳方法是什么。 我尝试了一些解决方案,但对我没有帮助 float n = 67.7345f; System.out.println(n % 1); System.out.println(n - Math.floor(n)); System.out.println(n - (int)n); 以下是输出: 0.7344971 0.7344970703125 0.7344971 但是我想要准确的7345 有没有最好的方法可以得到小数点后的精确数字 但我要准确的

编辑了我的问题:

提取小数点后数字的最佳方法是什么。 我尝试了一些解决方案,但对我没有帮助

float n = 67.7345f;
System.out.println(n % 1);
System.out.println(n - Math.floor(n));
System.out.println(n - (int)n);
以下是输出:

0.7344971
0.7344970703125
0.7344971
但是我想要准确的
7345

有没有最好的方法可以得到小数点后的精确数字

但我要准确的7345

因此,您可以简单地使用
%.4f

%.2f
将限制为小数点后两位

有没有最好的方法可以得到小数点后的精确数字

在处理浮点数时,浮点数肯定没有什么问题。浮点是32位精度的IEEE 754浮点。好书

我不知道这是否是最好的方法,但这里有一种处理浮点数舍入的方法:

public static BigDecimal roundFloat(float x, int roundTodecimalPlace) 
{
    BigDecimal b = new BigDecimal(Float.toString(x));
    b = b.setScale(roundTodecimalPlace, BigDecimal.ROUND_HALF_UP);       
    return b;
}
那就这样说吧

  float n = 67.7345f;
  BigDecimal i;
  i=roundFloat(x,4);
但我要准确的7345

因此,您可以简单地使用
%.4f

%.2f
将限制为小数点后两位

有没有最好的方法可以得到小数点后的精确数字

在处理浮点数时,浮点数肯定没有什么问题。浮点是32位精度的IEEE 754浮点。好书

我不知道这是否是最好的方法,但这里有一种处理浮点数舍入的方法:

public static BigDecimal roundFloat(float x, int roundTodecimalPlace) 
{
    BigDecimal b = new BigDecimal(Float.toString(x));
    b = b.setScale(roundTodecimalPlace, BigDecimal.ROUND_HALF_UP);       
    return b;
}
那就这样说吧

  float n = 67.7345f;
  BigDecimal i;
  i=roundFloat(x,4);

以下是将打印您提到的所有数字的代码:

 float n = 67.7345f;
 System.out.printf("n %% 1= %.4f%n", n % 1);
 System.out.printf("n - Math.floor(n) = %.4f%n", n - Math.floor(n));
 System.out.printf("n - (int)n= %.4f%n", n - (int)n);
要点是使用
%.4f


请查看。

以下是将打印您提到的所有数字的代码:

 float n = 67.7345f;
 System.out.printf("n %% 1= %.4f%n", n % 1);
 System.out.printf("n - Math.floor(n) = %.4f%n", n - Math.floor(n));
 System.out.printf("n - (int)n= %.4f%n", n - (int)n);
要点是使用
%.4f


查看。

您可以使用
java.math.BigDecimal
精确存储数据。然后可以打印小数点后的精确数字

使用float无法打印准确的数字,因为您不知道初始数字有多少位数

因此,请务必使用以下方法测试答案:

float n = 67.7f;
float n = 67.73f;
float n = 67.734f;
float n = 67.7345f;

String floatString = Float.toString(n) // could work, if no calculation was made with the float variable.

BigDecimal number = new BigDecimal("67.734");
BigDecimal result = number.subtract(new BigDecimal(number.longValue()));
System.out.println(result); // 0.734

您可以使用
java.math.BigDecimal
精确存储数据。然后可以打印小数点后的精确数字

使用float无法打印准确的数字,因为您不知道初始数字有多少位数

因此,请务必使用以下方法测试答案:

float n = 67.7f;
float n = 67.73f;
float n = 67.734f;
float n = 67.7345f;

String floatString = Float.toString(n) // could work, if no calculation was made with the float variable.

BigDecimal number = new BigDecimal("67.734");
BigDecimal result = number.subtract(new BigDecimal(number.longValue()));
System.out.println(result); // 0.734

如果您使用numWithDecimals%100,它将删除前2个值,您只需要小数:)

如果您使用numWithDecimals%100,它将删除前2个值,您只需要小数:)

\d+\。(\d+
可能会对您有所帮助(将
浮点
转换为
字符串
).
%.2f
将只打印2位小数
%.4f
在您的情况下会更好!您当前将输出限制为点后2位(使用
%.2f%
)。只需删除
.2
,您将获得点后的所有数字(或使用更大的限制,如
.6
或类似的限制)@maroun非常棘手。浮点数的输出可能因区域设置而异。听起来您只是不知道%.2f或%.4f格式。如果你真正想要的是一个正则表达式,那么请更明确地说出来,我很乐意为你重新提出你的问题。不过请注意,使用正则表达式可能是最糟糕的方法。
\d+\(\d+)
可能会对您有所帮助(将
浮点值转换为
字符串后)。
%.2f
将只打印2位小数
%.4f
在您的情况下会更好!您当前将输出限制为点后2位(使用
%.2f%
)。只需删除
.2
,您将获得点后的所有数字(或使用更大的限制,如
.6
或类似的限制)@maroun非常棘手。浮点数的输出可能因区域设置而异。听起来您只是不知道%.2f或%.4f格式。如果你真正想要的是一个正则表达式,那么请更明确地说出来,我很乐意为你重新提出你的问题。不过,请注意,使用正则表达式可能是最糟糕的方法。当
printf
显然是正确答案时,您将做什么工作?如果开发人员知道浮点的长度,那么printf工作得很好。我错误地认为printf不能正确地取整。我看不到用零填充数字位置的要求。当
printf
显然是正确答案时,你打算做什么?如果开发人员知道浮点的长度,那么printf工作得很好。我错误地认为printf不能正确地取整。我看不到用零填充数字位置的要求。向上取整会引入舍入偏差。向上取整会引入舍入偏差。