如何在不使用舍入的情况下将 java 中的 float 原语减少到两位小数?:
123.99999 to 123.99
-8.022222 to -8.02
不应该四舍五入,只保留两位小数。
第二点是如何验证或计算该点后有多少位小数?
123.99 will give true or 2
123.999 will give false or 3
更新
数字是字符串输入,所以我想我会按照建议使用它;对于任何异常,我将只使用 int try/catch block 。欢迎提出任何如何使这项工作更智能的建议:
public static float onlyTwoDecimalPlaces(String number) {
StringBuilder sbFloat = new StringBuilder(number);
int start = sbFloat.indexOf(".");
if (start < 0) {
return new Float(sbFloat.toString());
}
int end = start+3;
if((end)>(sbFloat.length()-1)) end = sbFloat.length();
String twoPlaces = sbFloat.substring(start, end);
sbFloat.replace(start, sbFloat.length(), twoPlaces);
return new Float(sbFloat.toString());
}
最佳答案
当您使用 DecimalFormat
时,请注意许多语言使用“,”而不是“.”这一事实。为 float 。因此,虽然您将 float 格式设置为“0.00”,但在某些语言环境(例如德语和波兰语)中它将变为“0,00”。这将导致 NullPointerException
,而您将在 android 应用程序中使用这个新格式化的 float 。所以我为了切割而不是舍入所做的是在将它乘以 100 之后将其转换为 int 然后将其重新转换回 float 并将其除以 100
这是一行:
myFloat = (float)((int)( myFloat *100f))/100f;
你可以用log试试:
float myFloat = 12.349;
myFloat = (float)((int)( myFloat *100f ))/100f;
Log.d(TAG, " myFloat = "+ myFloat); //you will get myFloat = 12.34
这会将 myFloat 的小数点后两位截断为 ("0.00") 的格式
它不会像这条线那样舍入它 (myFloat = Math.round(myFloat *100.0)/100.0;
) 它只会将它切掉。
关于Java float 123.129456 到 123.12 没有四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051395/