Re: [讨论] 请大家聊聊 JavaScript的缺陷

楼主: descent (“雄辩是银,沉默是金”)   2026-01-15 21:30:57
对这问题很好奇, c++ 也有类似的情形。
1 #include <iostream>
2 #include <string>
3 #include <cmath>
4 using namespace std;
5
6 int main(int argc, char *argv[])
7 {
8 std::cout.precision(2);
9 cout << fixed << 0.005 << endl;
10 cout << 0.015 << endl;
11 cout << 0.025 << endl;
12 cout << 0.035 << endl;
13 cout << 0.045 << endl;
14 cout << 0.055 << endl;
15 cout << 0.065 << endl;
16 cout << 0.075 << endl;
17 cout << 0.085 << endl;
18 cout << 0.095 << endl;
19 return 0;
20 }
n.cpp 执行结果
0.01
0.01
0.03
0.04
0.04
0.06
0.07
0.07
0.09
0.10
借由 ai, 终于知道是怎么回事, 当决定要印出小数点 2 位数时候用的算法是
“偶数舍入法”(Banker's Rounding) 这是很多绘图、统计或会计系统的规则:
若刚好在 .5 的位置, 则舍入到最接近的“偶数”。
0.005 → 靠近 0.00 还是 0.01? 这里 0 是偶数, 所以会趋向 0.00, 但在电脑里
0.005 是 0.00500000000000000010 所以它判断靠近 0.01。
0.015 → 靠近 0.01 还是 0.02? 这里 2 是偶数, 本应往 0.02 走, 但在电脑里 0.015
是 0.0149..., 所以它决定留在 0.01。
另外也请 ai 给出一个简易版本的算法, 实作 Banker's Rounding。
fn.cpp
1 #include <iostream>
2 #include <iomanip> // 必须包含此库以使用 setprecision
3
4 #include <cmath>
5 #include <string>
6 #include <cstdio>
7
8 using namespace std;
9
10 /**
11 * 模拟 setprecision(2) + fixed 的行为
12 * @param value 要输出的数值
13 * @param precision 小数点后位数
14 */
15 void my_print_fixed(double value, int precision) {
16 cout << fixed << setprecision(20) << value << endl;
17
18 // 1. 取得放大倍数 (例如 precision 2 则为 100)
19 long double multiplier = std::pow(10, precision);
20
21 // 2. 模拟底层舍入规则
22 // 注意:std::round 在这里会反映出 0.015 储存成 0.01499... 的事实
23 double rounded_value = std::round(value * multiplier) / multiplier;
24
25 // 3. 格式化输出字串
26 // 我们用 printf 的格式化字串来模拟输出流的最后一步
27 char format[10];
28 sprintf(format, "%%.%df", precision);
29 printf("Input: %.20f | Result: ", value);
30 printf(format, rounded_value);
31 printf("\n");
32 }
33
34 int main() {
35 double n1 = 0.005;
36 double n2 = 0.015;
37
38 std::cout << "
作者: nh60211as   2026-01-15 23:55:00
作者: galaxy4552 (无闻)   2026-01-16 00:46:00
哇 听不懂 如果说这个问题在leetcode 难度会在哪
作者: NDark (溺于黑暗)   2026-01-16 01:31:00
这年头还有人回娘家
作者: jonathan793 (pusheen cat)   2026-01-16 05:07:00
赞 留言 分享
作者: jobintan (Robin Artemstein)   2026-01-16 07:41:00
有人挖旧文炒热总比没有好,要不然,这板上的草都要长得比人高了。
作者: bradyhau106 (师弟)   2026-01-16 08:23:00
蛮有趣的讨论 至少不是AI正邪大战
作者: stupid0319 (征女友)   2026-01-16 08:28:00
我以为浮点数运算是看CPU决定的
作者: sw12 (专注.幽默)   2026-01-16 09:25:00
太强!翻到四五年前的文章在回应,还是专业讨论。
作者: Romulus (Säubern Mode)   2026-01-16 13:57:00
虾还有这种事?真的第一次听到靠近偶数这回事
作者: nashmvp ( )   2026-01-16 20:28:00
作者: gmoz ( This can't do that. )   2026-01-16 23:24:00
浮点数精准度不是老梗吗 IEEE754每家取整实作都不太一样要查一下 不一定都是四舍六入五成双像python2 vs 3问ai应该要多问他 其他语言或不同版本是不是一样实作吧单一问题不延伸确认 很常会被AI虎的一知半解

Links booklink

Contact Us: admin [ a t ] ucptt.com