Shell下浮点数表示问题

一、现象

 

$ echo "0.56" | awk '{printf "%d\n",$1*100}'    # 56 打印正确

$ echo "0.57" | awk '{printf "%d\n",$1*100}'    # 56 打印不正确

$ echo "0.58" | awk '{printf "%d\n",$1*100}'    # 57 打印不正确

$ echo "0.59" | awk '{printf "%d\n",$1*100}'    # 59 打印正确

 

二、原因

 

因为使用浮点数无法准确表示小数

 

#  echo "0.55" | awk '{printf "%2.20f\n",$1*100}'

55.00000000000000710543

#  echo "0.56" | awk '{printf "%2.20f\n",$1*100}'

56.00000000000000710543

#  echo "0.57" | awk '{printf "%2.20f\n",$1*100}'

56.99999999999999289457

#  echo "0.58" | awk '{printf "%2.20f\n",$1*100}'

57.99999999999999289457

#  echo "0.59" | awk '{printf "%2.20f\n",$1*100}'

59.00000000000000000000

 

三、解决方法

 

#  echo "0.56" | awk '{printf "%2.0f\n",$1*100}'

56

#  echo "0.57" | awk '{printf "%2.0f\n",$1*100}'

57

#  echo "0.58" | awk '{printf "%2.0f\n",$1*100}'

58

请使用浏览器的分享功能分享到微信等