Kotlin 如何在不损失精度的情况下倍增?

Kotlin 如何在不损失精度的情况下倍增?,kotlin,double,precision,Kotlin,Double,Precision,鉴于此功能: fun multiplyByHundred(num:Double):Double{ return num * 100 } 以下是一些输入的结果: 69.56=>6956.0 69.57=>6956.99999999 69.58=>6958.0 69.59=>6959.0 为什么69.57导致6956.99999999 如何在不损失精度的情况下正确地进行此计算,并使其与任何双精度计算一起工作 你不能。双精度只能表示实数的稀疏子集。如果可以适当地格式化输出(这基本上就是Mi

鉴于此功能:

fun  multiplyByHundred(num:Double):Double{
    return num * 100
}
以下是一些输入的结果:

69.56=>6956.0

69.57=>6956.99999999

69.58=>6958.0

69.59=>6959.0

  • 为什么69.57导致6956.99999999
  • 如何在不损失精度的情况下正确地进行此计算,并使其与任何双精度计算一起工作

  • 你不能。双精度只能表示实数的稀疏子集。如果可以适当地格式化输出(这基本上就是Microsoft Excel所做的,还有一些非常巧妙的表达式技巧,如1/3+1/3+1/3),则可以使用
    double

    如果你需要完美的精度,那么使用一种能够做到这一点的类型。十进制类型
    BigDecimal
    可能就是您想要的


    如果你使用的是货币,不需要担心1000(例如突尼斯第纳尔)或比特币(小数点后8位),那么使用美分和整数就是一种方法。

    你不能。双精度只能表示实数的稀疏子集。如果可以适当地格式化输出(这基本上就是Microsoft Excel所做的,还有一些非常巧妙的表达式技巧,如1/3+1/3+1/3),则可以使用
    double

    如果你需要完美的精度,那么使用一种能够做到这一点的类型。十进制类型
    BigDecimal
    可能就是您想要的


    如果您使用的是货币,不需要担心1000(如突尼斯第纳尔)或比特币(小数点后8位)的货币,然后使用美分和整数是一种方法。

    考虑一下:这实际上是我试图将一种货币转换为cents@kev我反复听到的一件事是,在处理货币时,通常不应该使用浮点数cents@kev我反复听到的一件事是,在处理金钱问题时,通常不应该使用浮点数。