それはちょうどround()
とcast
次のようになります。
#include <exception> // std::exception
#include <iostream> // std::cout
#include <limits>
#include <cstdint> // int64_t
#include <math.h> // round
int main(void)
{
double values[] = { std::numeric_limits<double>::min(), -1.38e10, -1023.299, -12.98,
0, 9.113e-16, 103.919, 17834.191, std::numeric_limits<double>::max() };
int64_t result;
for (double value : values)
{
try {
result = (int64_t)round(value);
std::cout << "Converted value '" << value << "' to value " << result << '\n';
}
catch (std::exception& e) {
std::cout << value << " is outside the range of the Int64 type: " << e.what() << '\n';
}
}
}
出力:Convert.ToInt64()
とは異なり
Converted value '2.22507e-308' to value 0
Converted value '-1.38e+010' to value -13800000000
Converted value '-1023.3' to value -1023
Converted value '-12.98' to value -13
Converted value '0' to value 0
Converted value '9.113e-016' to value 0
Converted value '103.919' to value 104
Converted value '17834.2' to value 17834
Converted value '1.79769e+308' to value -9223372036854775808
、範囲違反が例外をスローしません。 最後の出力行の変換エラーに注意してください。