输出 Scala Double 以创建与 Python 兼容的字符串
Output Scala Double to create string compatible with Python
当我在 Python 中使用双精度数进行计算时,格式化这些双精度数的输出返回的字符串如下所示:
>>> v = 1 / 10.0
>>> v
0.1
>>> "%.25f" % v
'0.1000000000000000055511151'
然而,当我用 Scala 做类似的事情时,我在最后得到零:
scala> val v = 1 / 10.0
v: Double = 0.1
scala> "%.25f" format v
res0: String = 0.1000000000000000000000000
我想使用 Scala 输出与 Python 相同 precision/rounding/whatever 的双精度小数,这样我就可以从 Scala 和 Python 代码中产生相同的输出.有谁知道这样做的方法吗?
谢谢!
编辑
我做了一些实验,这个 Java 程序似乎产生与 Python 代码相同的输出:
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
double v1 = 1.0;
double v2 = 10.0;
double v3 = v1 / v2;
BigDecimal bd1 = new BigDecimal(v3);
System.out.println(String.format("%.25f", bd1));
}
}
在 Scala 中创建了一个类似的程序,但它不起作用:
object Main extends App {
val v1: Double = 1.0d
val v2: Double = 10.0d
val v3: Double = v1 / v2
val bd1: BigDecimal = BigDecimal(v3)
println("%.25f" format bd1)
}
对于我这种情况的人来说,最好的选择可能是在 Scala 项目中包含一些简单的 Java 代码以用于格式化。会将问题标记为已回答。
Java 和 Scala 为您提供了最小的十进制表示形式,可以转换回与您开始时相同的 double
。 Python 为您提供由 double
表示的精确有理数的小数位数。这两个定义通常在第 17 位有效数字之后完全不同。事实上,第一个从不使用超过 17 个有效数字,而第二个可以有大约 750 个。
为了在Java中获得与Python打印相同的十进制数字字符串,首先将double
转换为BigDecimal
(此操作是无损的)然后打印 BigDecimal
号码。
当我在 Python 中使用双精度数进行计算时,格式化这些双精度数的输出返回的字符串如下所示:
>>> v = 1 / 10.0
>>> v
0.1
>>> "%.25f" % v
'0.1000000000000000055511151'
然而,当我用 Scala 做类似的事情时,我在最后得到零:
scala> val v = 1 / 10.0
v: Double = 0.1
scala> "%.25f" format v
res0: String = 0.1000000000000000000000000
我想使用 Scala 输出与 Python 相同 precision/rounding/whatever 的双精度小数,这样我就可以从 Scala 和 Python 代码中产生相同的输出.有谁知道这样做的方法吗?
谢谢!
编辑
我做了一些实验,这个 Java 程序似乎产生与 Python 代码相同的输出:
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
double v1 = 1.0;
double v2 = 10.0;
double v3 = v1 / v2;
BigDecimal bd1 = new BigDecimal(v3);
System.out.println(String.format("%.25f", bd1));
}
}
在 Scala 中创建了一个类似的程序,但它不起作用:
object Main extends App {
val v1: Double = 1.0d
val v2: Double = 10.0d
val v3: Double = v1 / v2
val bd1: BigDecimal = BigDecimal(v3)
println("%.25f" format bd1)
}
对于我这种情况的人来说,最好的选择可能是在 Scala 项目中包含一些简单的 Java 代码以用于格式化。会将问题标记为已回答。
Java 和 Scala 为您提供了最小的十进制表示形式,可以转换回与您开始时相同的 double
。 Python 为您提供由 double
表示的精确有理数的小数位数。这两个定义通常在第 17 位有效数字之后完全不同。事实上,第一个从不使用超过 17 个有效数字,而第二个可以有大约 750 个。
为了在Java中获得与Python打印相同的十进制数字字符串,首先将double
转换为BigDecimal
(此操作是无损的)然后打印 BigDecimal
号码。