浮動小数点の理解があまかったせいでACできなかった。 100倍して計算結果を100で割るところまでは思いついたが、キャストの部分でも誤差が出ることを理解していなかった。
例えば 0.79の場合、2進数で表すと 0 .11001010001111010111000010100011110101110000101000111101...
のように無限に繰り返される形になる。
これを10進数に表すと 0.789999999999999...
といった数値になる。
これを 100 倍して小数部を切り捨てし、100で割ると 0.78
となる。
これを避けるために、四捨五入する必要があるため、切り捨てる際は 0.5 を足せば良い。
double A = 0.79; long long a = (A * 100 + 0.5) / 100;