是Java';s BigDecimal是与C#';s小数
本文关键字:小数 是与 BigDecimal Java | 更新日期: 2023-09-27 17:57:52
根据这里的图表,Java中与C#的Decimal
等效的数据类型是BigDecimal
。
真的是这样吗?"大"序言怎么了?Java中似乎没有"SmallDecimal"或"LittleDecimal(更不用说"MediumSizedDecimal)"。
不过,我必须说,这张图表是我在这个问题上发现的最清晰的东西;这里、这里和这里的其他联系对我来说就像暴风雨过后的密西西比河一样清晰。
真的是这样吗?
它们相似但不完全相同。更具体地说:Java版本可以代表C#版本所能代表的每一个值,但事实并非如此。
"大"序言怎么了?
Java BigDecimal
可以具有任意的精度,因此可以是任意大的。如果你想制作一个有一千个精度的BigDecimal
,你可以直接去做。
相比之下,C#decimal
具有固定的大小;它占用128位,给你28个小数点。
更准确地说:这两种类型都会给你形式的数字
+/- someInteger / 10 ^ someExponent
在C#中,someInteger
是96位无符号整数,someExponent
是0到28之间的整数。
在Java中,someInteger
是任意大小的,而someExponent
是一个有符号的32位整数。
是的,这是相应的类型。
既然你是在C#之后使用Java的——不要太惊讶于发现这样的细微差别——或者当没有简单的方法来做一些"简单"的C#时,也不要太沮丧。我首先想到的是int&int?-在Java中,您只需要使用int和Integer。
C#有幸继承了Java,所以很多(我主观上认为)糟糕的决策都被修复/简化了。此外,C#是由Andres Hejlsberg(他可以说是世界上最好的编程语言设计师之一)设计的,并且与Java不同(你可能看到了自2000年以来添加到C#中的所有东西-完整列表)
C#Decimal和java BigDecimal类型是而不是等价类型。BigDecimal是任意精度。它可以以任何精度表示任何数字(直到RAM用完为止)。
C#小数是浮点;固定长度";(128位)。大多数时候,这就足够了!Decimal比BigDecimal快很多,所以除非你真的需要很高的精度,否则它是一个更好的选择。
您可能想要Javahttps://github.com/tools4j/decimal4j或类似的库。