【发布时间】:2020-11-22 06:12:24
【问题描述】:
有没有一种方法可以将双精度数转换为整数而不会在过程中出现任何不希望的错误?我在 Programming -Principles and Practice Using C++ (一本由 c++ 的创建者写的书)中读到了双精度数不能转换为整数,但我已经对其进行了测试,大约 80% 的时间它都能正确转换。如果可能的话,什么是完全没有风险的最佳方法?
例如,这可以正确转换。
double bruh = 10.0;
int a = bruh;
cout << bruh << "\n";
但这不是。
double bruh = 10.9;
int a = bruh;
cout << bruh << "\n";
简而言之,它不会自动舍入,所以我认为这就是它“不安全”的原因。
【问题讨论】:
-
也许你应该表明你的意思。显然,如果双精度大于最大整数,它将不起作用。
-
您的两个示例都有效。规则是小数部分被丢弃。
-
C++ 从 C 中获得了很多行为。你的“......没有冒任何不希望的错误的风险......”对我来说没有意义,因为这种行为是已知的。有一些函数可以进行从 double 到 int 的转换,让您可以更好地控制转换。您可以编写自己的例程来进行转换,如果它失败了您施加的任何约束,则提供
assert或throw异常。 -
我不确定您要避免的风险是什么。你能解释一下吗?
-
不是迂腐,但您所说的“安全”、“适当”、“不受欢迎”和“风险”是什么意思?没有一种正确的方法可以将双精度数转换为整数。只有您想要的应用程序的方式。 (好吧,我我很迂腐,但我们需要迂腐才能弄清楚你想要什么)