我在这里截断了一个 float 。但是我的值正在四舍五入。我不希望这样。例如,如果我的值是 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);
最佳答案
您始终可以使用老派技巧,乘以 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);
它可以完成这项工作,但您必须指定总位数。你不能只说我想要小数点后两位,而我不关心小数点左边的数字。这样,MathContext
的第一个参数是 5,而不是 2。如果您选择这种方法,您可以使用 Math.Ceil(Math.log10(x))
快速计算非十进制数字。
注意:
- 除法(第一种方法)时,至少有一个操作数必须是浮点型(float 或 double)
- 使用字符串(您编码)时,假设“.”是不安全的。是小数点分隔符
- 使用 Math.floor 截断小数仅适用于正值
关于java - 不使用 SetRoundingMode() 截断浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444640/