【问题标题】:Datatypes and screwy results PHP/C#/WinForms数据类型和奇怪的结果 PHP/C#/WinForms
【发布时间】: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


【解决方案1】:

AFAIK 在 PHP 中不支持小数类型。所以问题可能是关于$LineTotal$Price$Quantity 变量中真正的类型。考虑使用:http://php.net/manual/en/function.gettype.php

进行调查

【讨论】:

    【解决方案2】:

    嗯,我不确定 PHP,但是当我使用十进制类型和 C# 时也发生了奇怪的事情。所以我现在只使用 double。

    【讨论】:

    • -1 这几乎没有比尝试了解给您(和 OP)带来问题的类型更好的解决方案。
    • 这不是一个解决方案,他说他对我们如何处理定价、折扣等感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多