相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

浮点数的十进制精度

相当于log10(2 ^ 24)≈7.225十进制数字

维基百科

精度:7位数

MSDN

6

std::numeric_limits<float>::digits10
Run Code Online (Sandbox Code Playgroud)

为什么numeric_limits在这里返回6?维基百科和MSDN都报告浮点数具有7个十进制数字的精度.

floating-point

12
推荐指数
1
解决办法
1万
查看次数

Java浮点123.129456到123.12没有舍入

你如何在java中将float原语减少到两位小数,而不使用舍入?:

123.99999 to 123.99
-8.022222 to -8.02
Run Code Online (Sandbox Code Playgroud)

只有小数点的四舍五入应该没有舍入而留下两个.

第二点是你如何验证或计算点数后的小数位数?:

123.99 will give true or 2
123.999 will give false or 3
Run Code Online (Sandbox Code Playgroud)

UPDATE

数字是字符串输入所以我想我会按照建议去做; 对于任何异常,我都会使用int try/catch块.欢迎任何建议如何以更智能的方式使这项工作:

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());
}
Run Code Online (Sandbox Code Playgroud)

java floating-point decimal

6
推荐指数
3
解决办法
2万
查看次数