在Java中,如何删除十进制数的最后一位?

在Java中,如何删除十进制数的最后一位?,java,Java,例如,当我有3.333并且当代码被执行时,我需要数字是3.33 这是我的代码,应该这样做,但没有: String number = Double.toString(first); number = number.substring(0, string.length() - 1); first = Double.parseDouble(number); 我试着把数字转换成字符串,切掉最后一个字符,再把它保存成一个双精度的。但它不起作用。它不会截断1位,而是截断2位,例如,在上面它将返回3.3 这

例如,当我有3.333并且当代码被执行时,我需要数字是3.33

这是我的代码,应该这样做,但没有:

String number = Double.toString(first);
number = number.substring(0, string.length() - 1);
first = Double.parseDouble(number);
我试着把数字转换成字符串,切掉最后一个字符,再把它保存成一个双精度的。但它不起作用。它不会截断1位,而是截断2位,例如,在上面它将返回3.3

这种方法可靠吗?如果可靠,我能做些什么来修复它


此外,此方法是否有可能使程序崩溃?只有十进制数通过该代码,并且会导致精度损失?

如果您希望始终使用相同的十进制数,据我所知,最好的解决方案是:

DecimalFormat df = new DecimalFormat("#.00");

String formatedNumber = df.format(number);

如果您希望始终使用相同的小数位数,据我所知,最好的解决方案是:

DecimalFormat df = new DecimalFormat("#.00");

String formatedNumber = df.format(number);
试试这个:

double d = 3.333;
String str = String.format("%1.2f", d);
d = Double.valueOf(str);
System.out.println(d);
输出:

3.33

试试这个:

double d = 3.333;
String str = String.format("%1.2f", d);
d = Double.valueOf(str);
System.out.println(d);
输出:

3.33

那么这个呢:

double value = 3.333;
// Multiply it by 100, convert the result into an integer to trim 
// remaining decimals then divide it by 100d to get the result as double
double result = (int)(value * 100) / 100d;
System.out.println(result);
输出:

3.33

这个呢:

double value = 3.333;
// Multiply it by 100, convert the result into an integer to trim 
// remaining decimals then divide it by 100d to get the result as double
double result = (int)(value * 100) / 100d;
System.out.println(result);
输出:


3.33

您试图实现的主要问题是双倍始终是64位的信息。在表示抽象/非理性价值时,它们应尽可能准确,并且不打算以这种准确度进行操纵。它们的精确值不可信输入值1在保存为double或类似内容时可能最终为0.99999998。如果你想要一个确切的数字,考虑使用某种容量的Its,你可以做一个分数分子,它持有分子和分母。唯一应该减少双精度的时间是为了打印,而这只能通过上面所述的字符串表示来实现。

您试图实现的主要问题是双精度始终是64位信息。在表示抽象/非理性价值时,它们应尽可能准确,并且不打算以这种准确度进行操纵。它们的精确值不可信输入值1在保存为double或类似内容时可能最终为0.99999998。如果你想要一个确切的数字,考虑使用某种容量的Its,你可以做一个分数分子,它持有分子和分母。唯一应该减少双精度的时间是为了打印,而这只能像上面那样使用字符串表示法来完成。

使用String.format:

或使用BigDecimal:

setScale设置所需的小数点数量。 您可以稍后对上面的BigDecimal执行toString并将其打印出来。

使用String.format:

或使用BigDecimal:

setScale设置所需的小数点数量。 您可以稍后对上面的BigDecimal执行toString并将其打印出来。

此代码是可靠的

Double number = 3.333 ;
String  mano   = Double.toString(number);
String akmuo = mano.substring(0, mano.length() - 1);
number = Double.parseDouble(akmuo);
System.out.println(number);
这个代码是可靠的

Double number = 3.333 ;
String  mano   = Double.toString(number);
String akmuo = mano.substring(0, mano.length() - 1);
number = Double.parseDouble(akmuo);
System.out.println(number);


我建议使用BigDecimal而不是DoubleDecimal为什么?我看不出itString有任何理由使用格式化程序将字符串格式化为您想要的精度。您必须以字符串形式打印它才能获得所需的精度。但不要转换为字符串,然后再转换为双精度。这是可能的复制品:@Frecklefoot我现在来调查一下。我想用这种方法是没有办法使程序崩溃的?我建议用BigDecimal而不是doublewhy?我看不出itString有任何理由使用格式化程序将字符串格式化为您想要的精度。您必须以字符串形式打印它才能获得所需的精度。但不要转换为字符串,然后再转换为双精度。这是可能的复制品:@Frecklefoot我现在来调查一下。我想用这种方法是没有办法使程序崩溃的?他不是问取整的问题,只是把最后的数字删掉。String.format可以处理此任务,并且正是针对此类问题提供的。它们的字符串舍入技术很好。。。这根本不是一个字符串问题,而是一个值问题,因为对浮点数有一个基本的误解。他们使用Double.parseDouble并希望将数字四舍五入到小数点后一位。你为什么不看问题就否决我的答案??这个问题没有正确的答案,这只是一个误导性的问题,也是一个学习的机会。我会把你的回答记在心里。但我确实认为你让事情变得比需要的更复杂了。但是,我想你的解决方案可能有效,但我不会那样做。这是公平的,可能会很复杂,但如果这是一个真实的事实,我确信这是最好的事情,尤其是如果他们处于一个相当基本的水平,似乎是这样。建立一个更好的基础前进。他不是问舍入,只是切断最后的数字。String.format可以处理此任务,并且正是针对此类问题提供的。它们的字符串舍入技术很好。。。这根本不是一个字符串问题,而是一个值问题,因为对浮点数有一个基本的误解。Th
我们正在使用Double.parseDouble并希望将数字四舍五入到小数点后一位。你为什么不看问题就否决我的答案??这个问题没有正确的答案,这只是一个误导性的问题,也是一个学习的机会。我会把你的回答记在心里。但我确实认为你让事情变得比需要的更复杂了。但是,我想你的解决方案可能有效,但我不会那样做。这是公平的,可能会很复杂,但如果这是一个真实的事实,我确信这是最好的,尤其是如果他们处于一个相当基本的水平,似乎是这样的话。建立一个更好的基础前进。或者更简单的系统。out。PrtutNuff.ValueOfStopy.Fr.%1.2f,3.333;@稻草人-哦,是的,谢谢,希望他理解这些步骤。或者更简单的System.out.PrintLndough.ValueOfsString.format%1.2f,3.333@稻草人-哦,是的,谢谢,想让他理解这些步骤。没有必要让它比String.format更复杂。好的,我收回我之前的反对意见。你的答案很有创意,也很正确。没有必要让它比String.format更复杂。好的,我收回我之前的反对意见。你的答案很有创意,也很正确。大十进制方法对我来说是一个很好的选择。要转换为双精度,只需使用BigDecimal.doubleValue方法BigDecimal方法对我来说是一个非常好的选择。要转换为double,只需使用BigDecimal.doubleValue方法