Java float 123.129456 到 123.12 没有四舍五入

标签 java floating-point decimal

如何在不使用舍入的情况下将 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/

相关文章:

c - 当在 printf 中使用 %d 时,float 变量会发生什么?

c# - 为什么我的 C# 十进制值四舍五入为整数

c#:两个双数之和问题

C++ IsFloat 函数

c# - C# 的小数类型记帐安全吗?

java - 访问 Camel 中的初始交换消息

java - 在 Eclipse 中运行 Maven/Wicket 项目时的目标是什么?

javascript - 无法运行react-native-background-task。将代码插入 MainApplication.java 时出错

java.lang.reflect.inaccessibleobjectexception 无法使 jdk.internal.loader.classloaders

floating-point - 为什么 float 不正确?