提问人:Roy Givenchi 提问时间:8/20/2023 最后编辑:braXRoy Givenchi 更新时间:8/29/2023 访问量:86
反转百分比时获取原始数字
Get original number when reversing a percentage
问:
我正在尝试按百分比进行简单的价格更新,增加效果很好,但减法总是低于原始数字,即:
Increase: 1 + 5% = 1,05 // Subtract: 1,05 - 5% = 0.998
如何更新我的代码以在减法后获得相同的数字?
这是我正在使用的代码:
Imports System.Data.SqlClient
Public Class Form1
Private cmd As SqlCommand
Private cnn As New SqlConnection
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim iofile As New System.IO.StreamReader(Application.StartupPath + "/connect.txt")
Dim ioline As String
ioline = iofile.ReadToEnd
cnn = New SqlConnection(ioline)
cnn.Open()
cmd = New SqlCommand("update saprod_01 set price1=price1+(price1*@calc1/100);
update saprod_01 set price2=price2+(price2*@calc2/100);
update saprod_01 set price3=price3+(price3*@calc3/100);", cnn)
cmd.Parameters.Add("@calc1", SqlDbType.Decimal).Value = TextBox1.Text
cmd.Parameters.Add("@calc2", SqlDbType.Decimal).Value = TextBox2.Text
cmd.Parameters.Add("@calc3", SqlDbType.Decimal).Value = TextBox3.Text
cmd.ExecuteNonQuery()
MessageBox.Show("Updated", "Updated", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
End Class
其中 @calc1(和 2 和 2)将具有正整数值表示增加,负整数值表示减少。
答:
3赞
Dale K
8/20/2023
#1
根据您的说明,以下内容应该可以满足您的需求。您可以只使用事例表达式来确定是使用公式来添加还是反转金额。
- 注意:对于多列,您只需要一个更新语句。
update saprod_01 set
price1 = case when @calc1 > 0
then price1 * (100 + @calc1) / 100
else price1 / (100 + @calc1) * 100
end
, price2 = case when @calc2 > 0
then price2 * (100 + @calc2) / 100
else price2 / (100 + @calc2) * 100
end
, price3 = case when @calc3 > 0
then price3 * (100 + @calc3) / 100
else price3 / (100 + @calc3) * 100
end;
1赞
evolet herrington
8/20/2023
#2
这是一个解决方案:
要在应用百分比增加然后减少后获得原始数字,您需要除以 (1 + 百分比) 而不是减去百分比。
例如,将值增加 5% 后,您将得到 .要恢复它,您需要除以而不是减去 5%。value * 1.05
1.05
代码应调整为:
cmd = New SqlCommand("
update saprod_01 set price1=price1*(1 + @calc1/100);
update saprod_01 set price2=price2*(1 + @calc2/100);
update saprod_01 set price3=price3*(1 + @calc3/100);", cnn)
并减去或还原:
cmd = New SqlCommand("
update saprod_01 set price1=price1/(1 + @calc1/100);
update saprod_01 set price2=price2/(1 + @calc2/100);
update saprod_01 set price3=price3/(1 + @calc3/100);", cnn)
这种方法将确保您在减法后回到原始数字。
评论