我在这里截断一个浮点数。但是我的价值正在变得圆滑。我不想那样。例如我的价值是12.989 - >它应该只打印为12.98。有人可以帮忙吗 我不能使用十进制格式的SetRoundingMode,因为只支持java 1.6。 我的是1.5 JDK。有人帮助我而不使用SetRoundingMode()方法????
String pattern = "##,##0.00";
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat)nf;
double fPart;
Float value=233.989f;
String dstr = String.valueOf(value);
dstr = dstr.substring(dstr.indexOf(".")+1);
Long db = Long.valueOf(dstr);
if(db > 0){
df.applyPattern(pattern);
System.out.println("input="+value+", fPart="+dstr);
}
String output = df.format(value);
System.out.println(output);
答案 0 :(得分:2)
你可以随时使用旧学校技巧,乘以10 ^ n,截断,除以10 ^ n:
float x = 233.989f;
x = (float)(Math.floor(x * 100) / 100);
我也尝试过BigDecimal:
MathContext mc = new MathContext(5, RoundingMode.FLOOR)
BigDecimal decimal = new BigDecimal(233.989, mc);
System.out.println(decimal);
它可以完成工作,但您必须指定总位数。你不能只说我想要2位小数而且我不关心小数点左边的数字。这是MathContext
的第一个参数是5,而不是2.如果您选择这种方法,您可以使用Math.Ceil(Math.log10(x))
快速计算非小数位数。
注意:
答案 1 :(得分:0)
不确定我是否理解你的问题。但是如果你想在没有向上或向下舍入的情况下截断,你就可以使用
DecimalFormat df = new DecimalFormat("##.##");
df.format(12.912385);
答案 2 :(得分:-1)
您可以使用正则表达式获取“。”之后的第二个数字。然后从开头到该位置减去字符串,然后将字符串转换为float或double。
Pattern pattern = Pattern.compile("regular expression");
Matcher matcher = pattern.matcher("your string");
if(matcher.find())
{
int poz_begin = matcher.start();
int poz_end = matcher.end();
}