Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据类型和扭曲的结果PHP/C#/WinForms_C#_Php_.net_Mysql_Winforms - Fatal编程技术网

数据类型和扭曲的结果PHP/C#/WinForms

数据类型和扭曲的结果PHP/C#/WinForms,c#,php,.net,mysql,winforms,C#,Php,.net,Mysql,Winforms,我对PHP和WinForms(C#)中的十进制数据类型有很多问题。看,我已经为一个客户建立了一个网站和一个订单和库存管理应用程序,但通常情况下,这些价值观都会变得扭曲。我对你们如何处理价格、折扣和运费很感兴趣。你用浮点数,双小数吗 我发誓,当我第一次开始学习PHP并使用VARCHAR进行定价时,我遇到的麻烦就少了!(我没有夸张) 在我的客户数据库中,假设我有以下内容: Column Name Column Name Column Name Column Name Pr

我对PHP和WinForms(C#)中的十进制数据类型有很多问题。看,我已经为一个客户建立了一个网站和一个订单和库存管理应用程序,但通常情况下,这些价值观都会变得扭曲。我对你们如何处理价格、折扣和运费很感兴趣。你用浮点数,双小数吗

我发誓,当我第一次开始学习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
美分在哪里


这是什么原因造成的?我做错什么了吗?

AFAIK PHP中不支持十进制类型。因此,问题可能是关于
$LineTotal
$Price
$Quantity
变量中真正的类型。考虑调查使用:

UMM,我不确定PHP,但是当我使用小数类型和C时,我也有奇怪的事情发生。所以我现在只使用double。

您为
decimal
类型指定了多少位小数?可能您没有在小数点右侧指定位数,这就是为什么它始终是一个整数,例如,在C中,只是
4
而不是
4.92
,在变量后放置“m”将其转换为十进制。比如4.656M*343.2456M。。。得到结果后,在“.”后面加上两个数字,使结果更加精确。为什么这些结果“愚蠢”?你是否有这样的印象,乘法的结果总是会返回一个带有一定小数位数的结果?也许你会觉得这很有用。-1这几乎不是一个比试图了解给你(和OP)带来问题的类型更好的解决方案。这不是一个解决方案,他说他对我们如何处理定价、折扣等感兴趣。