【发布时间】:2011-05-22 06:19:09
【问题描述】:
我在 PHP 和 WinForms (C#) 中的 Decimal 数据类型有很多问题。看,我已经为客户建立了一个网站和一个订单和库存管理应用程序,但通常这些值会变得很糟糕。我对您如何处理定价、折扣和运费感兴趣。你用浮点数、双小数吗?
我发誓,当我第一次开始学习 PHP 并使用 VARCHAR 进行定价时,我遇到的麻烦少了! (我并没有夸大其词)
在我的客户数据库中,假设我有以下内容:
Column Name Column Name Column Name Column Name
Price Quantity Discount LineTotal
所有列都是十进制数据类型,数量除外。数量列是 int。
当我进行非常基本的计算时,例如:
$LineTotal = $Price * $Quantity;
我得到了愚蠢的结果,像这样:
5.98888
7.
9.111
0.4442
而且,最糟糕的是,它通常会从计算中完全删除数字:
如果例如乘法的结果是(或应该是):4.92
我去看看数据库,它会说:4
我的.92 美分呢?
是什么原因造成的?我做错了吗?
【问题讨论】:
-
您为
decimal类型指定了多少位小数?可能你没有指定小数点右边的位数,这就是为什么它总是一个整数,例如只是4而不是4.92 -
在 C# 中,在变量后放置“m”以将其转换为十进制。比如 4.656M * 343.2456M... 得到结果后,在“.”后面只用两位数字使其更精确
-
为什么这些结果“愚蠢”?您是否认为乘法的结果总是会返回具有特定小数位数的结果?也许您可能会觉得这个Floating Point Guide 有用。
标签: c# php .net mysql winforms