Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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
Sql 获取MS Access中数字的小数部分_Sql_Ms Access - Fatal编程技术网

Sql 获取MS Access中数字的小数部分

Sql 获取MS Access中数字的小数部分,sql,ms-access,Sql,Ms Access,如何在MS access中访问数字的小数部分?更具体地说,我只想要小数点后的组件,但不包括小数点。这也必须适用于所有整数。我已经看到了其他SQL引擎的答案,但它们在Access中不工作。我不能说得比这更具体了,因为我实际上在做的事情很敏感 例如,给定以下数字,输入在左侧,输出在右侧。输出可以是文本或数字 Source Correct Incorrect1 Incorrect2 10.0 0 0.0 .0 3.14159 14159 0.141

如何在MS access中访问数字的小数部分?更具体地说,我只想要小数点后的组件,但不包括小数点。这也必须适用于所有整数。我已经看到了其他SQL引擎的答案,但它们在Access中不工作。我不能说得比这更具体了,因为我实际上在做的事情很敏感

例如,给定以下数字,输入在左侧,输出在右侧。输出可以是文本或数字

Source Correct Incorrect1 Incorrect2 10.0 0 0.0 .0 3.14159 14159 0.14159 .14159 45.65 65 0.65 .65 173.0 0 0.0 .0 143.15 15 0.15 .15
减去值的整数部分

例如: 4.25-整数(4.25)=0.25

或者,作为示例SQL表达式:

SELECT
    [myDecimalNumber],
    [myDecimalNumber] - Int([myDecimalNumber]) as [rightOfDecimal]
FROM tableA
比如:

       SELECT 3.14%1 AS mycolumn from mytable

视情况而定。例如,如果是在文本框中,可以使用InStr查找小数点,然后使用Mid()函数获取后面的数字。如果它是一个算术方程的一部分,那么我将使用Int()函数从另一个数中减去一个数,得到差值

如果你能详细说明它是如何被使用的,在什么样的背景下,我可以编辑我的答案,给你更多的细节

编辑:更多信息曝光后,请尝试以下操作:

Public Function GetParts(Temp1 as Double)

Temp2 = Int(Temp1) 
Temp3 = Mid(Temp1, InStr(Temp1, ".") + 1) 

MsgBox Temp2 
MsgBox Temp3 

End Function
产生包含双精度小数位数的字符串的稳定解决方案。
从MyTable中选择小数位数(MyColumn)
其中,上述用户定义函数包含以下代码:

函数小数位数(ByVal值为Double)为字符串
作为字符串的Dim intPartLen
intPartLen=Len(CStr(CInt(Abs(值)))
如果Len(CStr(Abs(value)))>intPartLen,则
小数位数=Mid(CStr(绝对值)),整数+2)
其他的
小数位数=“0”
如果结束
端函数
它避免了常见的错误,因此

  • 独立于语言环境的-适用于任何十进制分隔符(它仅假设它是单个字符)

  • 保留精度-避免减法,仅从字符串表示中获取结果


注意:这些
Abs()
调用确实是必需的(提示:
-0.1

什么特别的“在Access中不起作用”?您的问题毫无意义。3.14没有小数点的是3,右边的数字是.14。如果不转换为字符串或进行数学运算(例如,乘以100),就不能“删除小数点”。没有小数点的0.049将变成.049*1000,或49-注意,它不是049。你到底想干什么?您是要将小数部分转换为整数,还是要将其提取为不带小数点的字符串?如果你不能清楚地陈述你的问题,我们就无法回答,你是在浪费我们的时间。我想把3.14分成两部分。它们应分别为3和14。如果这是PHP,则使用“.”作为分隔符的explode函数将完全满足我的要求。因为3.04应该分别是3和“04”(而不是4),所以把整个事情当作一个字符串就可以了。仔细想想,我可能会同意用4或“4”代替“04”。但是,输出不能包含实际的小数点。感谢您的编辑,以清楚地说明问题。基于您文章的质量和清晰度的提高,我投票决定重新打开。我需要25或“25”而不是0.25、“0.25”或“.25”。然后获取输出,使用
cStr
转换为字符串,并使用
replace()
删除小数。因此我尝试选择Mid(cStr(4.1-Int(4.1)),3),它可以工作,但如果我尝试选择Mid(cStr(4.0-Int(4.0)),3)它给我的是空白,而不是0。这是到目前为止我得到的最接近的值。
如果我添加一个Val,则选择Replace(CStr(4.1-Int(4.1)),“,”)
。选择Val(替换(CStr(4.1-Int(4.1)),“,”)并选择Val(替换(CStr(4.0-Int(4.0)),“,”,”),两者都能正常工作。该值存储为一个至少有1位小数的数字。丢失整数组件的结果需要看起来像一个整数。例如3.14->“14”。在类似3.04的情况下,结果必须是“04”,这与4不太一样。仔细想想,“04”和4可能不会有什么区别。这两种方法都可以接受,更接近,但有一种方法失败。小数点为0的任何内容。例如17.0应该返回0,在本例中返回17。不幸的是,由于我工作的敏感性,我不能再具体了。我实际上埋头于工作(是的,我实际上有一份全职工作,我没有为此获得报酬…),但我建议添加一些代码来测试它是否是整数。如果是,则将其格式化为0.0(与不强制为零的#.#相反),然后对其运行Temp3。如果没有,只需运行Temp3.I,虽然添加Val()会有所帮助,但事实并非如此。如果没有十进制成分,我仍然得到原始数字
Public Function GetParts(Temp1 as Double)

Temp2 = Int(Temp1) 
Temp3 = Mid(Temp1, InStr(Temp1, ".") + 1) 

MsgBox Temp2 
MsgBox Temp3 

End Function