- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
DECIMAL 应该是精确的。它不是。它像疯了一样圆!
表格:
account_balance DECIMAL(18,4)
如果我插入 43210987654321.9999它四舍五入为 43210987654322.0000
如果我插入 43210987654321.9876它四舍五入为 43210987654321.9840
为什么?如果我在创建表时使用大于 18 的数字,那就更糟了。
编辑:
我发布此澄清编辑是因为有些人不知道 DECIMAL 数据类型。
DECIMAL 数据类型是 FIXED POINT 数据类型,而不是 FLOATING POINT 数据类型。
使用它的原因是:
(1) 以精确的精度存储具有小数值的大量数字。
(2)防止使用 float 计算时无法避免的舍入错误。因此,对 DECIMAL 值的任何计算都应该是准确的……没有舍入误差。
POSTRESQL
http://www.postgresql.org/docs/8.1/static/datatype.html
numeric -- 用户指定的精度 -- 精确 --无限制
类型 numeric 可以存储精度高达 1000 位的数字并准确执行计算。 特别推荐用于存储货币金额和其他需要准确性的数量。但是,与整数类型或下一节中描述的浮点类型相比,数值运算非常慢。
decimal 和 numeric 类型是等价的。 这两种类型都是 SQL 标准的一部分。
MySQL
DECIMAL( , ) 存储为字符串的 DOUBLE,允许固定小数点。
http://www.htmlite.com/mysql003.php
MySQL 文档
定点(精确值)类型
DECIMAL 和 NUMERIC 类型存储精确的数字数据值。这些类型用于当保持精确精度很重要时,例如货币数据。在 MySQL 中,NUMERIC 被实现为 DECIMAL,因此以下关于 DECIMAL 的说明同样适用于 NUMERIC。
从 MySQL 5.0.3 开始,DECIMAL 值以二进制格式存储。以前,它们存储为字符串,值的每一位使用一个字符。 http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
M 的最大值 65 意味着对 DECIMAL 值的计算精确到 65 位。此 65 位精度限制也适用于精确值数字文字,因此最大范围这些字面量与以前不同。 (在旧版本的 MySQL 中,十进制值最多可以有 254 位。但是,计算是使用 float 完成的,因此是近似值 ,不准确。)
计算涉及精确十进制数的精确到 65 位。这小于 MySQL 5.0.3 之前允许的最大位数(254 位),但精确值精度更高。以前的计算都是用 double float 完成的,精度为52位(约15位小数)。
http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html
最佳答案
我在我本地的 mysql 5.1.36 上测试过,它没有舍入。你用的是什么版本。
另外,你用什么插入。你确定是mysql舍入而不是插入到mysql之前的存储。
关于即使使用 DECIMAL,MySQL 也无法处理大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480804/
我是 Python 编程的新手,最近我一直在学习数据类型的某些方面。正如我所读,decimal.Decimal() 方法创建了一个小数对象; decimal.Decimal.from_float()
这是我今天在 filmmaster.com: 遇到的错误 PicklingError: Can't pickle : it's not the same object as decimal.Decim
简单的问题 - 为什么 Decimal 类型定义这些常量?何必呢? 我正在寻找一个原因,为什么这是由语言定义的,而不是可能的用途或对编译器的影响。为什么首先把它放在那里?编译器可以像 Decimal.
我在用 Python 编码为 JSON 时遇到问题,特别是 decimal.Decimal 值。我正在使用它为 Google App Engine 应用程序输出 JSON。 为了避免 Python 中
我在 Django 项目中有一些 python 代码曾经可以正常工作。托管该项目的服务器丢失了,我不得不将代码复制到新服务器上。现在,我收到一个似乎毫无意义的错误。 我的一个 python 文件中包含
我发现生成具有特定数量 的 decimal.Decimal 数字的最佳方法 significant figures 是用来初始化下面的变量 kluge 的: import decimal THIS_I
我在应用空合并运算符时遇到以下错误。 private decimal _currentImpulseId; // ... later on used in public property getter
我想使用 decimal.Decimal 对转换后的数字字符串进行算术运算。无论转换后的数字字符串有多少小数,我都希望返回有两位小数。 在这种特殊情况下,为什么两位小数精度返回一位小数,为什么三位小数
我想使用 decimal.Decimal 对转换后的数字字符串进行算术运算。无论转换后的数字字符串有多少小数,我都希望返回有两位小数。 在这种特殊情况下,为什么两位小数精度返回一位小数,为什么三位小数
是什么导致 sum 始终为 null? object[] data = new object[] { 2.2M, 3m, 1, "string", true,
我似乎失去了很多 float 的精度。 例如我需要求解一个矩阵: 4.0x -2.0y 1.0z =11.0 1.0x +5.0y -3.0z =-6.0 2.0x +2.0y +5.0z =7.0
这个问题在这里已经有了答案: Why python decimal.Decimal precision differs with equable args? (2 个答案) 关闭 5 年前。 我知道
当我尝试转换 Task 时出现此错误至 decimal : Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Cul
我听到有人说在 C# 中,大写十进制比小写十进制使用更多的内存,因为小写十进制被解析为小写十进制并且需要内存。 这是真的吗? 最佳答案 没有。 decimal 只是 System.Decimal 的别
我有一个对象,它是 dict、list、常规数据类型和 decimal.Decimal 的嵌套组合。我想用 PyMongo 将这个对象插入到 MongoDB 中。 PyMongo 拒绝插入 Decim
sdr 是我的 sqldatareader,我想检查小数类型的 curPrice 值是否为空。 inrec.curPrice = sdr.IsDBNull(7) ? (十进制?)空:sdr.GetDe
变量 'a' 的类型可以是 - int/float/decimal.Decimal(但不是字符串) 我想检查它是否是 decimal.Decimal 类型。 以下作品: import decimal
我正在使用一个在函数调用中使用一些十进制类型参数的库。但是我有 numpy.int32 类型变量。当我将它传递给函数调用时,出现以下错误: TypeError: conversion from num
考虑以下代码: public class DecimalWrapper { public static implicit operator DecimalWrapper
考虑以下代码: public class DecimalWrapper { public static implicit operator DecimalWrapper
我是一名优秀的程序员,十分优秀!