【问题标题】:How do i handle data from MONEY column in SQL on the C# client?如何在 C# 客户端的 SQL 中处理来自 MONEY 列的数据?
【发布时间】:2015-05-21 08:12:29
【问题描述】:

假设有三个变量 x, y 和 Total。我在datagridview 上显示xy 以及total,以便客户可以看到并理解这些值。通常在客户可以看到的表格上,这些值放在两个decimal 点中。假设x, ytotalSQL server 中表的列。当我使用MONEY 作为这些列的类型时,它们的值将有四个小数点。这就是我的问题所在,当我在带有 两个小数点的表单上显示 x, ytotal 但 DB 表列实际上有 四个小数点时:

  1. 要在客户端显示两位小数的值,我需要舍入或截断四位小数的数据吗?

  2. 当有像total = x + y这样的操作时,我应该使用哪些值进行操作(两位小数或四位小数)?

【问题讨论】:

  • 也许我误解了你的问题。您能否举例说明您看到的包含两位和四位小数的数字?
  • 在对值进行数学运算时,显然应该使用尽可能高的精度。您选择如何显示它们完全取决于您。
  • @Dweeberly 请阅读我对 AaronLS 的评论!
  • 您可以在 SQL 中为十进制值设置 PrecisionScalePrecision 表示允许的总位数,Scale 表示最大小数位数。 SQL 中的默认值为(18,0),但您可以按表或按列配置这些。

标签: c# sql-server


【解决方案1】:

1) 当值显示两位小数时,我是否对值进行四舍五入 保留小数点后两位还是截断?

您应该做任何对您的业务有意义的事情。您需要与了解您正在处理的数据的人交谈。例如,如果是财务数据,他们可能会要求您使用“银行家四舍五入”。 .NET 支持多种形式的舍入。我怀疑在任何情况下你会被截断。

当有一个像total = x + y这样的运算时,我应该取哪些值 用于运算(两位小数或四位小数 点值)?

在执行算术之前不要四舍五入。您几乎可以肯定地使用所有可用的小数点进行算术运算,并且无论何时存储结果,存储结果以最大限度地保留小数点。只有当您需要向用户显示时,您才应该执行舍入。

如果您在执行算术之前执行了舍入,或者将结果舍入并存储以供以后使用,那么可能汇总这些结果的其他操作(例如平均)将遭受复合舍入错误。

【讨论】:

  • 例如,假设 234.567 的舍入值为 234.57。如果我对 234.567 进行百分比计算,它将给出一个答案,而我在 234.57 上进行另一个答案。有时客户有自己的袖珍计算器。如果我对小数点后 3 位进行计算,而客户从小数点后两位计算,他会质疑屏幕上显示的值不正确
  • 在这种情况下,我会与用户就他们的期望进行对话。首先,您最初是如何得到 234.567 的?如果该值最初输入为 234.56,那么它将保持为 234.56。所以在某个时候发生了一些事情,可能产生了利息并增加了 0.007。那将是我要重点讨论的地方,解释说你要保留那些小数位,因此他们不能指望手工计算匹配。
  • 1) 更改表格,使其显示三个小数位,或 2) 在表格中添加免责声明,说明基于 个小数位的计算,并且显示的结果可能不完全准确。
  • 那时,我会询问用户我们是否需要显示所有可用的小数位以确保没有混淆,或者可以做些什么来弥补这个差距。讨论的结果也可能是,根据业务规则,他们希望您在产生利息或任何产生额外小数位的操作时进行四舍五入。他们的政策可能是在产生利息时始终将其四舍五入为美分,因此您甚至不应该一开始就有这些额外的小数。
  • @greg 同意。或将计算更改为小数点后 2 位。只需与显示的内容和计算的内容保持一致即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 2012-03-02
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多