我正在构建一个存储函数以从浮点数返回有效数字。例如sfround(4.867,2)将返回4.8,sfround(1345,2)将返回1300
示例代码为
{this.state.modalVisible &&
<Modal onRequestClose={() => { }}>
<GallerySwiper
style={{ flex: 1, backgroundColor: "black" }}
images={[
{
source: {
uri: "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Google_Images_2015_logo.svg/1200px-Google_Images_2015_logo.svg.png",
dimensions: { width: 1080, height: 1920 }
}
},
]}
/>
<Header
style={{
backgroundColor: 'black',
borderBottomWidth: 0,
}}
>
<Right>
<Icon
name='close'
color='white'
onPress={() => {
this.setState({
modalVisible: false,
})
console.log("getting closed");
}}
/>
</Right>
</Header>
</Modal>
}
(我了解到缩进会导致mysql出现问题)
我抛出一个错误
delimiter //
CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
BEGIN
CASE n
WHEN 0 THEN RETURN 0;
ELSE
BEGIN
RETURN ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
END;
END CASE;
END//
delimiter ;
这是我第一次写这样的野兽,不知道从哪里开始。
答案 0 :(得分:1)
您可以将SQL CASE
用作单个表达式,该表达式返回单个值。在程序语言中,它不像IF
或switch/case
那样使用(尽管您可以do that too使用)。它是更多的功能样式。所以您可能需要的是:
delimiter //
CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
BEGIN
RETURN CASE n
WHEN 0 THEN 0
ELSE ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
END;
END//
delimiter ;
请注意,对于单语句过程或函数,不需要更改定界符。也可能只是
CREATE FUNCTION sfround(n FLOAT, sf INT) RETURNS FLOAT DETERMINISTIC
RETURN CASE n
WHEN 0 THEN 0
ELSE ROUND(n ,sf-FLOOR(LOG10(ABS(n ))))
END;
还要注意,我仅解决语法错误。不是使用的算法。