2016-12-14 5 views

答えて

0

それはちょうど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 

、範囲違反が例外をスローしません。 最後の出力行の変換エラーに注意してください。

関連する問題