C# int vs decimal用于小额处理

C# int vs decimal用于小额处理,c#,currency,calculation,C#,Currency,Calculation,对于表示货币,我知道最好使用C#的decimal数据类型来double或float,但是如果您使用的货币数量少于数百万,那么int不是更好的选择吗 decimal是否具有完美的计算精度,即不会受到影响?如果仍然存在计算错误的可能性,那么使用int并用十进制分隔符显示值不是更好吗?在这种情况下,使用decimal-over-integer的主要原因是decimal允许小数位数,即:2.50英镑可以正确地表示为带小数的2.5。然而,如果使用整数,则不能表示小数点。如果像John在评论中提到的那样,你

对于表示货币,我知道最好使用C#的
decimal
数据类型来
double
float
,但是如果您使用的货币数量少于数百万,那么
int
不是更好的选择吗


decimal
是否具有完美的计算精度,即不会受到影响?如果仍然存在计算错误的可能性,那么使用int并用十进制分隔符显示值不是更好吗?

在这种情况下,使用decimal-over-integer的主要原因是decimal允许小数位数,即:2.50英镑可以正确地表示为带小数的2.5。然而,如果使用整数,则不能表示小数点。如果像John在评论中提到的那样,你代表的是一种没有小数的货币,比如日元,这是可以接受的


至于十进制的准确性,它仍然受到“为什么计算机不擅长数字”的困扰。更多信息,请参见的答案。

在这种情况下,使用十进制优于整数的主要原因是十进制允许小数位数,即:2.50英镑可以正确地表示为带小数的2.5。然而,如果使用整数,则不能表示小数点。如果像John在评论中提到的那样,你代表的是一种没有小数的货币,比如日元,这是可以接受的


至于十进制的准确性,它仍然受到“为什么计算机不擅长数字”的困扰。有关更多信息,请参见的答案。

在您的示例中,您使用的数字“少于百万”不是问题所在。这就是你想对这些值做什么,以及你需要多少精度。而将这些数字视为整数并没有真正的帮助——这只是让你有责任跟踪精度。如果精确性至关重要,那么就有库可以提供帮助;BigInteger和BigDecimal软件包有多种语言可供使用,还有一些库对精度没有限制重要的收获是了解您的问题空间以及您需要的精度。对于许多事情来说,内置精度是可以接受的,但如果不是这样的话,你还有其他选择。

在你的例子中,你使用的数量“少于数百万”不是问题所在。这就是你想对这些值做什么,以及你需要多少精度。而将这些数字视为整数并没有真正的帮助——这只是让你有责任跟踪精度。如果精确性至关重要,那么就有库可以提供帮助;BigInteger和BigDecimal软件包有多种语言可供使用,还有一些库对精度没有限制重要的收获是了解您的问题空间以及您需要的精度。对于许多事情来说,内置精度是可以接受的,当它不是时,你有其他的选择。

就像li223所说的,integer不允许你用十进制大小写保存值,而且大多数货币都允许十进制值


我建议你选择一些十进制数,避免你提到的问题(“为什么计算机不擅长数字”)。我使用发票,我们使用8个小数点,目前为止,所有货币都可以使用。

正如li223所说,integer不允许您使用小数点保存值,而且大多数货币都允许使用小数点


我建议你选择一些十进制数,避免你提到的问题(“为什么计算机不擅长数字”)。我使用发票,我们使用8位小数,到目前为止,所有货币都可以使用。

我相信这在日本是可行的,我们不使用小数,但在其他国家使用
int
可能会导致计算问题。除非你想要
int值=100
mean$1或其他。@John,yes 100=$1正是我所说的“用十进制分隔符显示值”。它忽略了一个基本问题:计算结果始终是实际货币单位的近似值。int没有多大帮助:分7期偿还1美元贷款,100/7=14,7*14=98,少2便士。我相信这在日本是可行的,因为我们不使用小数,但使用
int
可能会在其他国家造成计算问题。除非你想要
int值=100
mean$1或其他。@John,yes 100=$1正是我所说的“用十进制分隔符显示值”。它忽略了一个基本问题:计算结果始终是实际货币单位的近似值。int没有多大帮助:分7次偿还1美元贷款,100/7=14,7*14=98,少2便士。你说int不能代表小数点是什么意思?如果我要,基本上,用整数来计算货币,比如说,美分,什么会阻止我在前端显示整数125为1.25?没有,但你必须将它除以100,然后输出它,而不是只输出它的值。举个例子,int的值不能是2.5。我想用字符串格式,但没问题。什么意思
int
不能表示小数点?如果我要,基本上,用整数来计算货币,比如说,美分,什么会阻止我在前端显示整数125为1.25?没有,但你必须将它除以100,然后输出它,而不是只输出它的值。举个例子,int的值不能是2.5,我想用字符串格式,但是可以。