- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在为 Java 和 SQL Server 中的精度梦魇而苦苦挣扎,直到我再也不知道了。就我个人而言,我理解这个问题及其根本原因,但向地球另一端的客户解释这一点是不可行的(至少对我而言)。
情况是这样的。我在 SQL Server 中有两列 - Qty INT 和 Price FLOAT。这些值是 - 1250 和 10.8601 - 所以为了获得总值(value),它的数量 * 价格和结果是 13575.124999999998(在 Java 和 SQL Server 中)。这是正确的。问题是这样的——客户不想看到那个,他们只看到那个数字 13575.125,仅此而已。在一个地方,他们以 2 位小数的精度查看它,而在另一个地方以 4 位小数的精度查看它。当以 4 位小数显示时,数字是正确的 - 13575.125,但当以 2 位小数显示时,他们认为这是错误的 - 13575.12 - 应该是 13575.13!
帮助。
最佳答案
您的问题是您使用的是 float 。在 Java 端,您需要使用 BigDecimal,而不是 float 或 double,而在 SQL 端,您需要使用 Decimal(19,4)(或者 Decimal(19,3),如果它有助于跳转到您的精度级别)。不要使用 Money 类型,因为 SQL 中 Money 类型的数学会导致截断,而不是舍入。数据存储为 float 类型(你说它是不可更改的)这一事实并不影响这一点,你只需要在对它进行数学运算之前第一时间转换它。
在你给出的具体例子中,你需要先得到4位小数精度的数字,视情况放入BigDecimal或Decimal(19,4)中,然后进一步四舍五入到2位小数精度。然后(如果你正在四舍五入)你会得到你想要的结果。
关于java - Java 和 SQL Server 中的精度噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1750139/
我知道这个问题已经被问过了,但我没有找到任何方法来阅读现有代码来找到解决我的问题的方法。我的一些应用程序用户对不同类型的 UnsatifiedLinkError 有经验: Caused by: jav
好的,我完成了。我不明白为什么会出现此错误: rake features 这不可能是我无法连接到 mysql 原因: rake db:migrate 完美运行。 我一直有这个错误: rake feat
我有一个容器 DIV position:relative。容纳一切然后一左一栏,一右一栏,经典布局。它们都绝对定位在这个相对#Main 中。我希望权利是流动的,所以我说 top: 0px;左:280p
嗨,你猜怎么着,我有一个 IE 定位问题!这是在 8 中,所以天知道其他版本中发生了什么(稍后检查) 两个盒子都调用同一个类,为什么IE这么难? 这是它的外观: 这是它的样子: CSS:(为了便于阅读
我无法理解正则表达式,感谢任何帮助! 我有很多字符串数据,可能包含也可能不包含字符串“1/10”或“2/10”或“2/18”等。基本上,分子和分母都可以变化。让事情变得更复杂的是,一些数据输入运算符(
我正在使用 Ooura 的 FFT 分析一些白噪声(持续时间为 75368 smp,有 44100 个噪声样本)。我得到的结果很奇怪:即使除以样本数,我的结果也小于 1.0,这是怎么回事? 我正在
前一周我一直在尝试让 WCF 的安全形式在 Azure 上运行,但一切都无济于事!我的用例非常简单。我想调用云中的 WCF 端点并传递消息以排队等待辅助角色。除此之外,我想限制对预先授权的用户的访问,
我正在尝试实现 Twitter 的自定义登录 View (我不想要那个 UIWebView)。我已经下载了很多类(class),但到目前为止我对此感到噩梦。现在我正在尝试让 Twitter + oAu
很高兴找到这样一个有用的网站,里面有天才成员(member)。一段时间以来,我一直在尝试寻找解决此 SQLITE 问题的方法。谷歌没有帮助我,除了找到这个网站。 SQL 查询在同一数据库的 MSAcc
我有一个基于 Spring Framework 的应用程序,我们之前已成功部署它并正在添加新功能。我们的开发机器是 JDK6 和 Tomcat7。我们正在使用 Spring 3.1.0.M2。旧代码使
各位业内资深人士, 我是一名大三学生,开始了我的第一个暑期编程实习,而且我已经不知所措了。我工作的公司从另一家公司购买了一个巨大的应用程序,该公司自 90 年代初以来一直在缓慢地扩展和修改它。该解决方
我知道你在想什么,另一个 netbeans xdebug 帖子? 好吧,我已经尝试了我在其他帖子中看到的所有内容,但似乎没有任何效果。这是我的设置: 操作系统:Ubuntu 9.10 PHP:5.2.
好的,所以我尝试在该程序的对话中实现一个计时器,该计时器在进入下一个对话之前暂停一秒钟。当我尝试这个时,java会抛出很多错误,例如:非法的表达式开始,;预期,.class 预期,并在解析时到达文件末
我在使用 Spring Jdbc 从数据库检索数据时遇到问题。这是我的问题: 我的 DAO 上有一个 getData() 方法,该方法应该从某些 select 语句的结果中返回一行。再次调用时,get
我的主类是一个包含图形组件的窗口,其中包括 JTable。 我创建了一个公共(public)类ContextMenu,它是JPopupMenu的自定义实现,并包含多个JMenuItem。 我已在 JT
The best way to illustrate this question is with...a Fiddle! 在您访问 fiddle 之前,请注意最灰色的元素后面有文本,该文本位于具有边框
我似乎无法处理收到的 CSV。这是银行生成的文件,看起来像这样: "000,""PLN"",""XYZ"",""2011-08-31"",""2011-08-31"",""0,00""" 1,""E"
一次提交 2447 个文件时,我完全陷入了 SVN 错误。我在 Windows 7 64 位上使用 TortoiseSVN(最新版本)。 事实是,一些文件是在 Mac 上创建的,而另一些文件是在 PC
我将从我要完成的事情开始。 我有一个 ListFragment,与 LoaderCallbacks 关联以从数据库检索数据。使用 AsyncTask 下载数据,并插入到数据库中。当用户到达列表底部时,
当我在探查器中运行以下代码时,我得到一个 char[] 和 byte[],它们会不断累积,直到程序因 Java 堆内存不足异常而崩溃。有人能告诉我为什么吗?也许我在做一些根本性的错误。 package
我是一名优秀的程序员,十分优秀!