Java 我想在浮点后存储一个数字
如果我的用户输入了5.123,我怎样才能像5.1一样将其存储在内存中 在爪哇 注意:我不需要显示它,我只想(存储)在浮点后的一位数中 例: 6.334213=>6.3 7.23947=>7.2 100.123123=>100.1Java 我想在浮点后存储一个数字,java,floating-point,Java,Floating Point,如果我的用户输入了5.123,我怎样才能像5.1一样将其存储在内存中 在爪哇 注意:我不需要显示它,我只想(存储)在浮点后的一位数中 例: 6.334213=>6.3 7.23947=>7.2 100.123123=>100.1 0.123123=>0.1据我所知,没有一个好的方法可以做到这一点,所以我倾向于这样做:乘以10,然后四舍五入,再除以10。你可以使用: DecimalFormat df = new DecimalFormat("###.#"); 有关舍入双值的详细信息,请阅读。好问
0.123123=>0.1据我所知,没有一个好的方法可以做到这一点,所以我倾向于这样做:乘以10,然后四舍五入,再除以10。你可以使用:
DecimalFormat df = new DecimalFormat("###.#");
有关舍入双值的详细信息,请阅读。好问题。这里有一个例子。您可以使用DecimalFormat对象
import java.text.DecimalFormat;
import java.math.RoundingMode;
import java.util.*;
public class HelloWorld {
public static void main(String []args) {
DecimalFormat df = new DecimalFormat("##.#");
df.setRoundingMode(RoundingMode.DOWN);
float number = 6.334213f;
float fixedNumber = Float.parseFloat(df.format(number));
System.out.println(number);
System.out.println(fixedNumber);
}
}
首先,创建DecimalFormat对象并确定格式以及舍入模式。然后,您可以使用format
函数对其进行转换。但是,此函数返回一个StringBuffer对象(请参见),因此要再次将其存储在浮点中,我们需要使用float.parseFloat()
将其转换回浮点
更新:(更好的方式)
这可能是一种更有效的方法。。。将数字乘以其基数(因为它是十进制(常规)数字,基数为10),提升到小数点后要保留的位数
因此,在下面的示例中,我们希望截断除“.”右侧的1个有效数字以外的所有数字,因此我们将10乘以1(仅为10),使用Math.floor()
函数删除小数,然后再次除以乘以的数字
public class HelloWorld {
public static void main(String []args) {
double number = 6.334213d;
double fixedNumber = Math.floor(number * 10.0) / 10.0;
System.out.println(fixedNumber); // 6.3
number = 6.334213d;
fixedNumber = Math.floor(number * 1000.0) / 1000.0;
System.out.println(fixedNumber); // 6.334
}
}
如果我们想在“.”后面保留3位数字,则乘以10^3(即1000),然后除以相同的数字。浮点a,x;a=scan.nextFloat();x=数学四舍五入(a*10)/10;系统输出println(x);输出=>5.0,但我需要5。1@Adham您是否知道应除以
10f
(或10.0表示双精度)51/10
是整数除法,结果是int
5。还要注意0.1+0.2!=0.3
floatValue=Float.valueOf(String.format(“%.1f”,floatValue))代码>试试这个。使用BigDecimal
既然十进制数字在你的代码中非常重要,为什么不使用BigDecimal呢?乘+除10会更快,但它也会失去精度(如果你在意的话,在本例中作者可能不在乎)。@bezmax这是真的,但我认为这正是作者想要的问题(除非我遗漏了什么)。不,我的意思是,由于CPU是如何进行浮点计算的,通过执行乘法和除法,您的位很容易溢出。请参见此示例: