我可能完全错了,我对此一无所知,但我对编程语言中的十进制数字数据有疑问.我知道浮点数并不完全精确,因为它们以二进制形式存储有权或其他东西,但我总是想知道为什么十进制数数据类型不只是存储一个数字就像没有小数一样,所以做计算就像如果没有小数,则在之后添加.就像在这种情况下:
2.159 * 3.507 --> 2159 * 3507 = 7571613
^^^ ^^^
123 456
6 decimals in total... 7571613 -> 7.571613
^^^^^^
654321
Run Code Online (Sandbox Code Playgroud)
所以2.159*3.507 = 7.571613
为什么它不能像那样工作?
假设我们有这种循环(伪代码)
double d = 0.0
for i in 1..10 {
d = d + 0.1
print(d)
}
Run Code Online (Sandbox Code Playgroud)
在C与printf("%f", d)我得到这个:
0.100000
0.200000
0.300000
...
1.000000
Run Code Online (Sandbox Code Playgroud)
在C++中,cout << d我得到了这个:
0.1
0.2
...
1
Run Code Online (Sandbox Code Playgroud)
在Java中,System.out.println(d)我得到了这个:
0.1
0.2
0.3 (in debug mode, I see 0.30000000000004 there but it prints 0.3)
...
0.7
0.799999999999999
0.899999999999999
0.999999999999999
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
在短暂地寻找几个小时后,我看到了我的问题的多种解决方案,但我正在努力实施它们,希望有人可以帮助一个菜鸟.
问题是我在ASP/MySQL Web应用程序中有一个下拉框,显示一些错误的价格.例如,如果数据是32.00,则显示的数字将返回为32,类似地,如果6.50显示为6.5数据类型或价格在db表中设置为十进制(19,2)长度,并且价格在其他地方正确显示除了在下拉框中显示的这一个选项实例中.我很确定有一个简单的解决方案,非常感谢修复.我以为我可以添加.toFixed(2),所以实际上它就像这个<%= DealCartsDB("price").toFixed(2)%>,但它说不支持.
<select name="deal" class="qty" onChange="swapDeal()">
<option value="-1">CHOOSE YOUR DEAL</option>
<% while not DealCartsDB.Eof %>
<option value="<%=DealCartsDB("dealid")%>"<% if clng(dealID)=DealCartsDB("dealid") then %> selected<% end if %>><%=DealCartsDB("dealname")%>........£<%=DealCartsDB("price")%></option>
<% DealCartsDB.MoveNextWend %></select>
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢,谢谢.
有人可以解释下面发生的事情:(我使用Python 3.3)
1. >>> Decimal("0.1") + Decimal("0.1") + Decimal("0.1") - Decimal("0.3")
Decimal('0.0')
2. >>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
Decimal('2.775557561565156540423631668E-17')
3. >>> Decimal(0.1 + 0.1 + 0.1 - 0.3)
Decimal('5.5511151231257827021181583404541015625E-17')
Run Code Online (Sandbox Code Playgroud)
我知道它与浮点限制有关,如果有人可以解释原因,我会很高兴
" "要做的实例1和2以上的区别" "?我认为很简单.
我有一个显示项目长度的查询.
查询:
select length from vw_OutstandingVsInStock1 OVI
LEFT JOIN Departments DEP
on OVI.Department COLLATE DATABASE_DEFAULT=DEP.Description
where OutstandingVolume>0.39
Run Code Online (Sandbox Code Playgroud)
这会返回如下结果:
0.9
1.2
1.5
1.8
2.1
2.4
2.7
3.0
3.3
3.6...
Run Code Online (Sandbox Code Playgroud)
在3.0我希望它显示为的情况下3
所以如果没有小数值,则显示int没有小数.如果存在十进制显示十进制到1小数点?
所以期望的输出是3而6不是3.0和6.0
我正在使用MSSQL 2012.
我正在使用R xtable包将我的数据帧打印为LaTeX表.我一直在使用该digits选项来指定表格中值的有效位数.然而,有了digits=3,我得到如下输出:
...
chat & chatd & 1.04 & -0.526 & 0.943 \\
dav1 & davis & 0.922 & 0.0551 & 0.374 \\
...
Run Code Online (Sandbox Code Playgroud)
我希望能够指定表格中的小数位数,这样所有内容都有3个小数位,即使最后几个地方用零填充也是如此.因此,例如,第一个数字列将具有
1.040
0.922
Run Code Online (Sandbox Code Playgroud)
所以一切都有3个小数位,所以一切都排好了.
有没有办法做到这一点?
这是关于D3中轴的刻度:有没有办法用数字中的逗号替换小数点?我希望数字显示如下(在德国这是正常的,这么大的数字只是为了演示)
1.000.000,1 // This is one million and a tenth
Run Code Online (Sandbox Code Playgroud)
而不是这样的:
1,000,000.1
Run Code Online (Sandbox Code Playgroud)
我已经阅读了有关该主题的文档,但似乎没有可能!?到目前为止,这是我的相关代码:
localeFormatter = d3.locale({
"decimal": ".",
"thousands": ",",
"grouping": [3],
"currency": ["", "€"],
"dateTime": "%a, %e %b %Y, %X",
"date": "%d.%m.%Y",
"time": "%H:%M:%S",
"periods": ["", ""],
"days": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
"shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
"months": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
"shortMonths": ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", …Run Code Online (Sandbox Code Playgroud) 假设以下数字:
local a = 2
local b = 3.1
local c = 1.43
local d = 1.0582
Run Code Online (Sandbox Code Playgroud)
我的目标是将这些数字四舍五入到小数点后两位。结果应该分别是这样的:
a = 2.00
b = 3.10
c = 1.43
d = 1.06 or 1.05
Run Code Online (Sandbox Code Playgroud)
显然,我知道任何带有尾随小数零的数字都会被四舍五入。2.00将2。但我需要将数字作为字符串,并且为了使其在视觉上更具吸引力,我需要这两个小数位。
这是我用来四舍五入到小数点后两位的函数:
function round(num, numDecimalPlaces)
local mult = 10^(numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
Run Code Online (Sandbox Code Playgroud)
这对于测试用例c和效果很好d,但会产生错误的结果 和a:b它不会用零填充。我理解这是因为舍入函数获取数字并计算它们 - 因此多余的零被切断。
但这并不是我的目标——不是切断它们。
我尝试过字符串操作,通过检查 a 是否在数字中以及在数字中的位置,但这在任何情况下都.不起作用。我的方法:
local zei
if i < …Run Code Online (Sandbox Code Playgroud) 其他问题表明,Python f 字符串在某个小数点处对数字进行四舍五入,而不是截断它们。
我可以用下面的例子来展示这一点:
>>> number = 3.1415926
>>> print(f"The number rounded to two decimal places is {number:.2f}")
The number rounded to two decimal places is 3.14
>>>
>>> number2 = 3.14515926
>>> print(f"The number rounded to two decimal places is {number2:.2f}")
The number rounded to two decimal places is 3.15
Run Code Online (Sandbox Code Playgroud)
然而,我遇到了另一种情况,Python 似乎截断了数字:
>>> x = 0.25
>>> f'{x:.1f}'
'0.2'
Run Code Online (Sandbox Code Playgroud)
我本以为0.25,精确到小数点后一位,会四舍五入为0.3。我是否遗漏了什么,或者这种行为不一致?
我对RPGLE了解不多。我正在尝试解决给我的这个小练习。我从来没有做过或见过使用小数的练习。我想获得 7 个值的百分比。所以,我想做如下计算。
例如在 RPGLE 中。
DTotal S 3P 0
DPercnt S 2P 2
/Free
Total = 589;
Percnt = (Total/700)100;
Dsply Percnt;
*Inlr = *On;
/End-Free
Run Code Online (Sandbox Code Playgroud)
预期输出是84.142857143将小数位四舍五入到两位(84.14)或四位(84.1430)。
Total和Percent变量?Percent变量(打包或分区)来保存两位、四位或 N 位小数?我遇到的错误和我进行的更正:
The end of the expression is expected.(在东南大学)
对于上面的错误,我添加了*并解决了Percnt = (Total/700) * 100;
下面是第二个错误。
The target for a numeric operation is too small to hold the result (C G D …Run Code Online (Sandbox Code Playgroud)decimal-point ×10
python ×2
asp-classic ×1
c ×1
c++ ×1
d3.js ×1
decimal ×1
division ×1
java ×1
javascript ×1
latex ×1
localization ×1
lua ×1
percentage ×1
python-3.x ×1
r ×1
rounding ×1
rpgle ×1
sql-server ×1
xtable ×1