丸めたり切り捨てたりせずに、ランダムな double を long に変換しようとしています。最初に double を文字列に変更し、小数点以下の桁数を確認してから、値を long に変更します。私の問題は、最後の小数点以下の桁数が常に正しいとは限らず、その理由と変更方法がわからないことです。コードは次のとおりです。
double z=(double) myRandom(1, 20);
long test;
String s = Double.toString(z);
test=(long) (Math.pow(10, s.length()-s.indexOf(".")-1)*z);
System.out.println("z: "+z);
System.out.println("double converted to long: "+test);
そして、それが出力です:
d: 19.625014811604743
double を long に変換: 19625014811604744
日: 9.143326452202839
double を long に変換: 9143326452202838
日: 5.8964228376511105
double を long に変換: 58964228376511104
d: 15.045936360299917
double を long に変換: 15045936360299918
d: 14.147950026532694
double を long に変換: 14147950026532694