我很好奇money数据类型和类似之间是否存在真正的差异decimal(19,4)(我认为这是内部使用的钱).
我知道这money是特定于SQL Server的.我想知道是否有令人信服的理由选择一个而不是另一个; 大多数SQL Server示例(例如AdventureWorks数据库)使用money而不是decimal价格信息之类的东西.
我应该继续使用money数据类型,还是使用十进制代替?Money输入的字符较少,但这不是有效的原因:)
我正在设计一个数据库表,并再一次问自己同样愚蠢的问题:firstname字段应该多长时间?
有没有人有最常见字段的合理长度列表,例如名字,姓氏和电子邮件地址?
我正在研究一个非常基本的购物车系统.
我有一个items具有price类型列的表integer.
我无法在包括欧元和美分在内的价格中显示价格值.就Rails框架中的处理货币而言,我是否遗漏了一些明显的东西?
我试图找出SQL Server中列的十进制数据类型.我需要能够存储15.5,26.9,24.7,9.8等值
我分配decimal(18, 0)了列数据类型,但这不允许我存储这些值.
这样做的正确方法是什么?
根据文档,该decimal.Round方法使用round-to-even算法,这对于大多数应用程序来说并不常见.所以我总是最终编写一个自定义函数来做更自然的圆半算法:
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这个框架设计决策背后的原因?
是否有任何内置的圆形半算法实现到框架中?或者可能是一些非托管Windows API?
对于初学者而言,这可能会产生误导,因为他们只是写了一个decimal.Round(2.5m, 0)期望3但结果是2.
我需要在Django模型的字段中存储一美元金额.什么是最好的模型字段类型?我需要能够让用户输入这个值(通过错误检查,只需要一个精确到美分的数字),格式化输出给不同地方的用户,并用它来计算其他数字.
我读到了关于NSLocaleCurrencySymbol的信息,但在哪里可以找到用于确定一个国家/地区货币中使用的"小数位数"的变量?
IE在美国,通常会看到以小数点后两位写入的美元金额:1.23美元
那么其他很多国家呢?
这听起来像一个愚蠢的问题,但我注意到在很多电子商务相关项目的表设计中,我几乎总是看到小数(19,4)用于货币.
为什么4规模?为什么不2?
也许我错过了一个潜在的计算问题?
我一直在为我的应用程序制作"产品对象"并且我一直在设置属性,当突然我得到价格属性并偶然发现问题什么类型更好选择?我明白,对于PHP而言,这并不重要,但我们可以说它适用于MySQL.
有什么建议?
我们将所有与货币相关的值存储在我们的数据库中(ODM,但ORM可能会表现相同).我们使用MoneyType将面向用户的值(12,34€)转换为他们的美分表示(1234c).在典型的float精度问题就出现在这里:由于精确度不够有创造调试时仅仅是可见的舍入误差许多情况下.MoneyType会将传入的字符串转换为可能不精确的浮点数("1765"=> 1764.9999999998).
一旦你坚持这些价值观,事情就会变得糟糕:
class Price {
/**
* @var int
* @MongoDB\Field(type="int")
**/
protected $cents;
}
Run Code Online (Sandbox Code Playgroud)
将转换传入的值(浮动!),如:
namespace Doctrine\ODM\MongoDB\Types;
class IntType extends Type
{
public function convertToDatabaseValue($value)
{
return $value !== null ? (integer) $value : null;
}
}
Run Code Online (Sandbox Code Playgroud)
(整数)强制转换将剥离值的尾数而不是舍入值,从而有效地导致将错误的值写入数据库(当"1765"在内部时为1764.9999999998时,1764而不是1765).
这是一个单元测试,应该在任何Symfony2容器中显示问题:
//for better debugging: set ini_set('precision', 17);
class PrecisionTest extends WebTestCase
{
private function buildForm() {
$builder = $this->getContainer()->get('form.factory')->createBuilder(FormType::class, null, []);
$form = $builder->add('money', MoneyType::class, [
'divisor' => 100
])->getForm();
return $form;
}
// …Run Code Online (Sandbox Code Playgroud) 我需要做一些计算但是我遇到的问题是非常低的值,例如,我需要获得0.005%的2.7%而我最终得到1.3500000000000003e-4这不是我想要的,我只需要知道如何获得这些值的准确感知,我现在正在做的是<value> * 2.7 / 100对整数或大于0.05的浮点数有效.
例如,我需要的那个是0.005%的0.005,需要显示为0.000135.