问题描述
|
我正在进行计算,现在得到12,443。我想将其四舍五入为12,40。这是我尝试的方式,但是我得到的是12点而不是12,40点
float result = Math.round( (new Float(result1)*0.3) + (new Float(result2)*0.7) );
vprosvasis.setText( Float.toString(result) );
例子:
如果我得到12,70001我想四舍五入到12,7
如果我得到13,4402将其四舍五入为13,4
11,19至11,2
因此,最终数字将始终为##。@格式
解决方法
(float)Math.round(value * 10) / 10
应该给您想要的结果。
,我有此功能来做到这一点:
public static float get_ROUND(float p_VALUE,int p_DECIMAL)
{
if (p_DECIMAL == 0) return (float) Math.round(p_VALUE);
long l_LNG = 1;
for (int i = 1; i <= p_DECIMAL; i++)
{
l_LNG = l_LNG * 10;
}
return (float) Math.round(p_VALUE * l_LNG) / l_LNG;
}
,DecimalFormat twoDForm = new DecimalFormat(\"#.##\");
yourvalue= Double.valueOf(twoDForm.format(yourvalue));
,使用DecimalFormat
,但指定正确的舍入模式。默认情况下,它使用ROUND_HALF_EVEN
,但是ROUND_HALF_UP
在许多金融应用中很常见。
如果您确实想在进一步的计算中找到并使用舍入后的值(这是不寻常的,因为它会产生不准确的结果),则可以使用BigDecimal
。
我假设result1
和result2
是String
实例。
float value = Float.parseFloat(result1)*0.3F + Float.parseFloat(result2)*0.7F;
BigDecimal d = new BigDecimal(String.valueOf(value));
BigDecimal rounded = d.setScale(1,BigDecimal.ROUND_HALF_EVEN);
与乘,舍入和除法相比,使用BigDecimal
的主要优点是可以选择舍入模式(半舍入,半对等)。 BigDecimal
的操作要比原始的float
昂贵得多,因此对于交互式金融应用程序来说,这比科学模拟是更好的选择。
然后,您可以按原样使用rounded
值,或将其转换为float
。您可以使用toString()
方法将其转换为String
,但是最好使用对语言环境敏感的DecimalFormat
对象,该对象将通过format()
方法接受BigDecimal
。
, vprosvasis.setText(\"\"+new DecimalFormat(\"#,###,###.#\").format((result1*0.3)+(result2*0.7)))